タグ

SQLインジェクションとPHPに関するmsakamoto-sfのブックマーク (4)

  • PHPで動的なSQLでプリペアドステートメントな一例(本題は、IN句でどうやってプリペアるか) - がるの健忘録

    端的には「PHPで、動的にSQL文を組む必要があるときにどうやってプリペアドステートメントで組んでいくか」の一例と、それに合わせて「INをうまいことプリペアドステートメントで使いたい」時の一例を書いてみます。 いやなんか知られてるような知られてないような微妙なナレッジだったので「まぁ書いておけばいいや」的な、雑な発想ですw 毎度のお話な気もするのですが。 「ここクラックできるんぢゃね?」とかあったらコメント等にて突っ込みをいただければ、速やかに修正を入れます ノ さて「PHPで、動的にSQL文を組む必要があるとき」って例えばどんな? ってのがあるのですが。 割と端的には「(複数の入力項目がある)検索系のフォーム」。 「なにか入力されていたらその項目を検索用に使う」「なにも入力されてなかったらその項目は検索用に使わない」ってのは、多分、業務的には「ちょいちょいあって」かつ「ある程度、動的に対

    PHPで動的なSQLでプリペアドステートメントな一例(本題は、IN句でどうやってプリペアるか) - がるの健忘録
  • JSON SQL Injection、PHPならJSONなしでもできるよ

    DeNAの奥さんと、はるぷさんがJSON SQL Injectionについて公表されています。 The JSON SQL Injection Vulnerability 不正なJSONデータによるSQL Injectionへの対策について (Json.pm+SQLクエリビルダー) 上記の記事は、主にPerlスクリプトがJSONデータを受け取るシナリオで説明されています。もちろん、この組み合わせに限定したはなしではないわけで、それではPHPではどうだろうと思い調べてみました。 JSON SQL Injectionとは 以下、はるぷさんの「不正なJSONデータによる…」にしたがってJSON SQL Injectionについて説明します。 Perl向けのSQLジェネレータの一つであるSQL::Makerにおいて、以下のスクリプトを想定します。 my ($sql, @bind) = $builde

  • PDOに複文実行を禁止するオプションが追加されていた

    エグゼクティブサマリ PHP 5.5.21、PHP 5.6.5 以降、PHPにPDO::MYSQL_ATTR_MULTI_STATEMENTSというオプションが追加され、PDO+MySQLの組み合わせで、SQLの複文を禁止できるようになった。この設定はSQLインジェクションの緩和策として有効である。 はじめに 2013年12月に公開した PHP+PDO+MySQLの組み合わせではSQLインジェクション攻撃で複文呼び出しが可能 にて、PDOとMySQLの組み合わせで、SQLインジェクションの文脈で複文呼び出しが可能であることを報告していましたが、その後のPHPのバージョンアップで、複文実行を禁止するオプションが追加されていましたので報告します。 対象のバージョンは以下の通りです。 PHP 5.5.21 以降 PHP 5.6.5 以降 全ての PHP 7.0、7.1 前述の記事を書いた後、3大

  • サニタイズ/入力値検証/エスケープの考え方 - Qiita

    結論 ・PHPに入ってくるときに入力値検証 ・PHPから出ていくときにエスケープ ・サニタイズはない サニタイズ サニタイズって言うと怖い人たちがやってくるから言わないようにしましょう。 サニタイズは入力値検証もエスケープもなにもかもを含んだ広い意味になってしまったので、うっかり言ってることがい違うと大変です。 入力値検証 入力値検証は、PHPの外からPHPに入ってくる値を検証することです。 外というと主に$_REQUEST/$_GET/$_POST等のリクエストパラメータがイメージされますが、実際はそれ以外にも環境変数、コマンドライン引数、ファイルやデータベースからの読み込みなど、PHP以外からやってくる全てのものを指します。 入力値検証はセキュリティ対策ではない もう入力値検証はセキュリティ対策としてあてにしないようにしようという記事がありますが、「もう」以前に、そもそも入力値検証は

    サニタイズ/入力値検証/エスケープの考え方 - Qiita
  • 1