PHP コードの Web サイトで SQL インジェクションの脆弱性攻撃を防ぐ方法についての提案を共有する

WBOY
リリース: 2016-06-13 12:02:08
オリジナル
1190 人が閲覧しました

ハッカーは、SQL インジェクション攻撃を通じて Web サイトのデータベースにアクセスし、Web サイトのデータベース内のすべてのデータを取得することができ、SQL インジェクションを通じてデータベース内のデータを改ざんしたり、データベース内のデータを破壊したりする可能性があります。 Web 開発者は、この種のハッカー行為を嫌います。もちろん、SQL インジェクションの原理を理解し、コードを通じて Web サイトのデータベースを保護する方法を学ぶ必要もあります。今日は、PHP および MySQL データベースを例として使用して、SQL インジェクション攻撃について私が知っていること、いくつかの簡単な予防策、および SQL インジェクション攻撃を回避する方法に関するいくつかの提案を共有します。
SQL インジェクションとは何ですか?
SQL インジェクションとは、簡単に言うと、コードの脆弱性を利用して、Web サイトやアプリケーションのバックグラウンドで SQL データベースのデータを取得し、データベースにアクセスすることです。たとえば、ハッカーは Web サイト コードの脆弱性を悪用し、SQL インジェクションを使用して企業 Web サイトのバックエンド データベース内のすべてのデータ情報を取得する可能性があります。データベース管理者のログイン ユーザー名とパスワードを取得した後、ハッカーはデータベースの内容を自由に変更したり、データベースを削除したりすることができます。 SQL インジェクションは、Web サイトやアプリケーションのセキュリティをテストするためにも使用できます。 SQL を挿入する方法は数多くありますが、この記事では最も基本的な原則のみについて説明します。例として PHP と MySQL を使用します。この記事の例は非常に単純です。他の言語を使用する場合は、SQL コマンドに注目するだけで理解できます。
単純な SQL インジェクション攻撃ケース
すべての顧客データとその他の重要な情報を Web サイトのバックエンド データベースに保存する企業 Web サイトがあるとします。 Web サイトのログイン ページのコードにユーザー情報を読み取るコマンドが含まれている場合。

コードをコピー コードは次のとおりです:


<
$q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' ";
?>


今度は、データベースを攻撃しようとするハッカーが、このログイン ページのユーザー名入力ボックスに次のコードを入力しようとします。
' ;
ログイン ボタンをクリックすると、このページにデータベース内のすべてのテーブルが表示されます。ここで次のコマンド行を使用すると:
'; DROP TABLE [テーブル名];
このようにして、テーブルを削除します。
もちろん、これは非常に単純な例にすぎません。実際の SQL インジェクション方法はこれよりもはるかに複雑で、ハッカーは喜んでコードを攻撃しようと多くの時間を費やします。 SQL インジェクション攻撃を自動的に継続的に試行できるソフトウェア プログラムがいくつかあります。 SQL インジェクション攻撃の原理を理解した後、SQL インジェクション攻撃を防ぐ方法を見てみましょう。
SQL インジェクションの防止 - mysql_real_escape_string() 関数を使用します。
データベース オペレーション コードでこの関数 mysql_real_escape_string() を使用して、引用符などのコード内の特殊文字を除外します。例:

コードをコピー コードは次のとおりです:


<
$q = "SELECT `? id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET['password'] ). " ' ";
?>


SQL インジェクションの防止 - mysql_query() 関数を使用すると、特に
mysql_query() は SQL コードの最初の行のみを実行し、後続の行は実行されません。実行されました。前の例で、ハッカーがコードを通じてバックグラウンドで複数の SQL コマンドを実行し、すべてのテーブルの名前を表示したことを思い出してください。したがって、mysql_query() 関数はさらなる保護を実現できます。今のコードをさらに進化させて、次のコードを取得します。

コードをコピーします コードは次のとおりです:


< ;?
//接続
$database = mysql_connect("localhost", "ユーザー名","パスワード");
//db 選択
mysql_select_db("database", $database); 🎜>$q = mysql_query("SELECT `id` FROM `users` WHERE `username`= ' " .mysql_real_escape_string( $_GET['username'] ). " ' AND `password`= ' " .mysql_real_escape_string( $_GET[ 'password'] ). " ' ", $database);


さらに、PHP コード内の入力値の長さを決定することもできます。入力された値を確認する機能です。したがって、ユーザー入力値が受け入れられる場合は、入力内容をフィルタリングしてチェックする必要があります。もちろん、意図的な防止を実現するために、最新の SQL インジェクション手法を学び理解することも非常に重要です。 WordPress などのプラットフォームベースの Web サイト システムを使用している場合は、必ず公式パッチを適用するか、適時に新しいバージョンにアップグレードしてください。何か間違っている場合や理解できない場合は、コメント欄にメッセージを残してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート