PHPとSQL注入攻撃[三]


この数日間は忙しすぎて、引き続き連載します。上記のように、データベースに備わっている不安全な入力フィルタ機能は、すべてのデータベースにある機能ではないです。現在は大体MySQLしかないです。SQLite、PostgreSQL、SyboaseはOracleとSQLを含みます。 Serverを含めた多くのデータベースがありません。このような状況を鑑みて、一般開発者は安全でないデータをデータベースに書き込むことを避けるために共通の方法を採用している。これにより、問題を引き起こす可能性のある特殊な文字による危険をすべて回避することができます。しかし、Base 64符号化後のデータ容量は33%ぐらい増加し、比較的占有空間が増えます。PostgreSQLでBase 64を使ってデータを符号化するにはもう一つの問題があります。したがって、このようにまとめると、私たちはデータベース自体の文字列で遮蔽するだけではいけないことを知っています。私たちは特殊文字が私たちのQuery文に影響を与える前に、危険な文字をフィルタしてしまう解決策が必要です。事前定義クエリ(Prepared) queries/prepared statementsはとてもいい方法です。何が事前定義クエリですか?これはクエリー語句のテンプレートに相当し、クエリ語句の構造と一部のデータタイプを定義しています。私たちが提出したSQL文がこのテンプレートの定義に符合すれば、実行します。そうでなければ実行しません。エラーを報告します。例えば:pg_query($conn) “PREPARE stmt_name (text) AS SELECT * FROM アメリカ WHERE name=$1")pg_query($conn) “EXECUTE stmt_name ({$name"),"pg_query($conn) “DEALLOCATE stmt_namePREPARE stmt_name (text) AS ..ここでは$1以外のすべての文字はプレースホルダであり、変更は許可されていません。ほほほ、この方法は本当にいい方法だと思います。しかし、すべてのデータベースがサポートされていません。