ホームページ >バックエンド開発 >PHPチュートリアル >PHP アンチインジェクション攻撃体験_PHP チュートリアル
一:
このトピックはありきたりすぎます。
PHP.INI で magic_quotes_gpc = On を設定します
確かに一部の注射攻撃を防ぐことができますが、万能なのでしょうか?
現在、POST または GET で受け取った変数を変換し、スペース、句読点、特殊文字を HTML エンコーディングに変換しています。
デモ中に復元します。どうやってコードを共有しましたか?
インジェクションを完全に防ぐ唯一の方法は、SQL ステートメント内で変数を小さな引用符で囲み、その後
magic_quotes_gpc = オンにすると、スペース、句読点、特殊文字が HTML エンコードに変換されます。
これで一旦解決すると思いますが、網をすり抜けた魚がいるかどうかはわかりませんが、現在開発中のシステムで注射が不要になれば、安心して眠れます。はは
通常、各ページで関数を直接使用して、_get、_post、_session およびその他のデータを最初にフィルターします
データベースに書き込むときはデータ型を確認することが必須です~
基本的に、これらは一般的な注射効果に適しています
1 SQL ステートメントは、sprintf を使用してクエリを実行するのが最適です
例:
はは、それは私が挙げた例です。丁寧にまとめてみましたが、注射されないのはとても簡単です。
概要は以下の通りです
magic_quotes_gpc = On がオンになっている場合、変数を小さな引用符で囲む必要があるため、変数に小さな引用符を追加する必要があります。突破は、magic_quotes_gpc = On でエスケープされます。引用は失敗しました。悪いことはできません。
もう一つのポイントは、MYSQL には # と /* という 2 つのコメント マークがあり、これによって次の SQL 言語名をコメントアウトし、この 2 つの文字を ASC コードまたは HTML コードに変換できます。
そして攻撃を注入する親はスペースです。
たとえば、スペースを削除または変換する場合は、select * from news where id=1 Union select * from admin となります。
select * from news where id=1unionselect*fromadmin となり、データを盗んだ結果になります。
select * from news where id=1; テーブルニュースをドロップ ここでスペースを削除します。
select * from news where id=1; は実行できません。
したがって、インジェクション攻撃の親はスペースです。スペース置換後。本当に安心して眠れます