コンテナにログインコンテナ名を指定してbashを起動する。これでコンテナの中のシェルが操作できる。rmでビルドしたイメージを削除。`start`)で取得できる。00:12:13のようなフォーマットで返るこれをさらにtime_to_sec関数で整数値の秒にする。18:03SQLでdatetimeの差を秒の整数で取得Tweetもっと読むコメントを書く2017-12-12CakePHPではDBカラムのSQLインジェクションに注意!CakePHPアドベントカレンダー12日目の記事です。市川@cakephperです。CakePHP使ってますよ!丹精込めてVAddyを作ってます。セッションIPAが売っててテンションが上がりますね。CakePHP2,3のDBカラム名の扱いCakePHP2の公式ドキュメントでは下記の注意書きがあります。配列の値部分のみエスケープします。キーにユーザーデータをセットしないでください。SQLインジェクションの脆弱性になります。CakePHPのORMでWHERE句を生成する場合に、カラム名やSQLスニペットはエスケープされません。ないパターンかもしれませんが、ユーザから送信されたリクエストデータの配列をそのまま条件に指定している場合はSQLインジェクションにつながります。公式ドキュメントでも同じく注意書きがあります。'あいうえお'];であった場合、この送信された配列データをそのまま下記のようにfindメソッドの条件に渡している場合は危険です。$this->request->data['Model']]);このように送信されたデータが連想配列になっていて、フォームの検索項目を増やしていけば自然と検索条件も増えていくため一見便利なように見えますが、配列のキーは何もエスケープされずにWHERE句のカラム名として使われます。受け取ったリクエストデータの配列のキーが改ざんされた場合はSQLインジェクションの脆弱性が発生します。CakePHP3の場合は、where()メソッドに渡す配列のキーがエスケープされずそのまま渡されますので同様に注意が必要です。対応策ユーザからのリクエストデータが配列の場合は、キーを信用せず値だけ使うようにしましょう。$this->request->data('Model.keyword');追記(2017/12/26)CakePHP2の、ControllerクラスのpostConditions()にこのSQLインジェクションの脆弱性があり、2017/12/16に修正されています。Securityコンポーネントを使わずに、postConditions()だけを使ってfindの条件(conditions)を作成してfind()に渡している場合は危険ですのでご注意ください。GitHub基本的には信用するフィールドのみ受け付けるか、最新のCakePHP2を使うか、私が作っているSecurePHPライブラリのように配列のキーで受け付ける文字列を制限してNGのものは削除するのが良いかと思います。ホッピークリスマスIPAの季節になりましたね。美味しいクラフトビールに恵まれて幸せです。市川@cakephperです。丹精込めてVAddyを作ってます。Requestはこちらです。Blogのlocakdiskさんの記事があります。対処法この修正を見て、そもそも最近の高速なCPUや複雑なネットワーク、サーバ環境においてリモートからのタイミング攻撃は可能なのか?という疑問が浮かびました。今回はPHPを例に説明しますが、結論の箇所はPHPに関係なく他の言語でも同様の結論です。タイミング攻撃とはタイミング攻撃とは、処理速度や消費電力の違いを利用して機密情報を取得するサイドチャネル攻撃の一種です。例として、処理が遅いデバイスで入力値の時間の変化によってパスワードを1文字ずつ解析するものがあります。文字列がマッチする長さによって処理時間が異なります。微妙に処理時間が異なります。===では下記のような動作になります。比較する文字列の長さが異なると即falseを返す同じ長さの文字列は、前方から1文字ずつ比較し、異なった時点でfalseを返すこれにより、パスワード文字列などが効率的に取得できます。hash_equals()がPHP5.6から用意されています。タイミング攻撃の利点パスワードを破る場合、総当たりのブルートフォース攻撃がありますが、これは多くのパターンを試行しなくてはならず、時間がかかります。数字のみのパスワード6桁の場合、最大で100万回の試行が必要です。タイミング攻撃がうまくいくと仮定すると、最小で60回程度の試行、1回では判別できないことが多いので、何度か試行してその100倍、1000倍程度の回数になります。1000倍でも6万回。ネットワークの遅延など、ランダムな遅延が発生するので、1文字に対してある程度の回数を試行し、統計処理をすると解析できるというものです。揺れが大きく多くの試行が発生する場合は、結局ブルートフォースと同じぐらいの試行回数となる可能性もあるため、どれぐらいの精度で判別できるかが焦点になります。文字列比較のようなμsec程度の処理の差を、ネットワーク越しのWebサーバから検出できるのかというのが今回の疑問点です。文字列比較の処理時間に比べて、下記のような他の要素が圧倒的に時間がかかるものがある環境で統計的に解析できるのが信じられません。同じネットワークの経路を通るとは限らず、混雑などの影響の遅延がばらつくWebサーバのアクセス数や、同時に起こっている別の人の処理内容は異なっているWebサーバの手前のキャッシュサーバや多段構成の要素の影響また解析できたとしても試行回数が多くなって、それはブルートフォースと比べてパフォーマンスが良いのかという点も気になります。同じような疑問をもっている人がいて、検証した論文が2015年に公開されています。Practicalここでの結論としては、インターネット経由の場合はμsecレベルの差は検出できないLAN内であっても1μsec程度の処理差だと検出できない(一般的なサーバCPUの文字比較程度だと無理)となっています。1μsecを超えるようなもう少し重い処理であれば、LAN内なら検出できる可能性はあるようです。$userを評価してfalseならhash_equals()は処理されない点が興味深いですね。今回のコードでは問題になりませんが、$userの結果がtrue/falseによって時間差が生じますので、下手をすると別の問題を引き起こしてたかもしれません。そもそも元のコードPHPは比較演算子を使ってるわけではなく、SQLのWHERE句でトークンの条件を指定していただけです。それをPHPのタイミング攻撃が!と言ってわざわざSQLから取得した結果をもとにトークンの一致をhash_equals()を使ってやっています。Requestを送ってる人もタイミング攻撃の詳細はあまりよくわかってなく、とりあえずそれっぽいところにはhash_equals()を使うという表面的な考えしかないように見えます。今回はLaravelの脆弱性修正箇所を見て、これは本当に必要な修正だったのだろうかという疑問が残ります。今回のような影響小さそうだけど良くわらからないから面倒だからという場合は、あまり考えずに取り込んでしまうのではないでしょうか。そもそも現在の環境でほぼ起こらない問題を指摘して、PHPのお作法的にはこうなってるからしたほうがいいよ(詳細は知らんけど)ぐらいの理解の人が声をあげていくのは良いのだろうか、コア開発者をうんざりさせるだけなのではないか、そう感じました。この話とはちょっとそれますが、面白い記事があったのでリンクを貼っておきます。アクセスを許可したいドメインのホストゾーンIDを記載する。今回は2つのゾーンを許可している。route53:ListHostedZonesを全てのリソース*で許可する。全てのリソースで許可する理由は、route53:ListHostedZonesは、リソースの範囲を特定ゾーンに絞れないため。17:49Route53のDNSレコード操作のみ許可するIAMロールTweetもっと読むコメントを書く2017-03-10口座振替の依頼書で銀行印が必要なのは1ページ目だけ(捨印は任意)支払い方法が口座振替(引き落とし)に限られている場合、自分の銀行印を押して提出する必要がある。一般的には、1枚目は銀行用、2枚目が委託業者用、3枚目がお客様控えになっていると思う。2、3枚目は写しになっているが、なぜかそこにも銀行印を押すようなフォーマットの用紙がある。(写しだから1枚目と同じ記述になっている)しかし、2枚目、3枚目は銀行以外のところで保管されるため、銀行印は押したくない。そこで口座振替依頼書に記載された電話番号(今回はSMBC系列)にかけて聞いてみた。銀行用と書かれた1枚目のみ銀行印を押せば良い2枚目以降は銀行印は不要。何も押印しないか、認印を押せばよい捨印は、1枚目も含めて任意であり必須ではないまぁ、普通に考えればそうだよねという結論だが、振替依頼書のフォーマットによっては2枚目、3枚目にも銀行印が必要という記述があって(写しだから)、何も考えないとそのまま銀行印を押してしまうケースは多いと思う。2枚目は基本的に支払先が管理する用紙のため、申し込み先のお店やスクールなどが管理する。ここに銀行印を押したものを管理されたくないので今回調査した。amazonlinuxベース月別アーカイブ注目記事スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。