ホームページ  >  記事  >  バックエンド開発  >  SQL インジェクションを防ぐ PHP の効果的な方法_PHP チュートリアル

SQL インジェクションを防ぐ PHP の効果的な方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:10:00816ブラウズ

データのセキュリティとインジェクションを防ぐために、最初は $_GET で取得した文字列をフィルタリングする必要があります。後でフィルタリング関数を作成しました。

PHP チュートリアルに付属するフィルター関数を見てみましょう。そこで、addslashes を皆さんにお勧めします。

addslashes() の使用例は、データベース チュートリアルにデータを入力する場合です。たとえば、O'reilly という名前を変更します

データベースに挿入します。これにはエスケープが必要です。ほとんどのデータベースはエスケープ文字として O'reilly を使用します。これ

このようにして、余分な を挿入せずにデータベースにデータを入れることができます。 PHP ディレクティブ magic_quotes_sybase が

の場合

オンに設定すると、' を挿入するときに ' がエスケープされることを意味します。

例:

MySQL チュートリアルと PHP には、文字の問題を処理できる多くの関数が付属しています。ここではよく使用される関数をいくつか紹介します。 psチュートリアル: php6はmagic_quotes_gpcをサポートしていないため、以下のことはすべて仮定です


magic_quotes_gpc=off (php6 でどんな新しいものが出てくるかわかりません...)

mysql_real_escape_string()

定義: 関数は、SQL ステートメントで使用される文字列内の特殊文字をエスケープします。

構文: mysql_real_escape_string(string,connection)
説明: この関数は文字列内の特殊文字をエスケープし、接続の現在の文字セットを考慮するため、安全に使用できます

mysql_query()。

サンプルコードが長すぎるので機能説明のリンクを貼っておきます


この関数は文字列内の特殊文字をエスケープし、接続の現在の文字セットを考慮するため、安全に使用できます


mysql_query()。

データベース攻撃。この例は、mysql_real_escape_string() 関数をユーザー名とパスワードに適用しない場合に何が起こるかを示しています


何が起こるか:

$con = mysql_connect("localhost", "hello", "321");

if (!$con)
{
die('接続できませんでした: ' .mysql_error());
}

$sql = "ユーザーから * を選択

WHERE ユーザー='{$_POST['ユーザー']}'

かつパスワード='{$_POST['pwd']}'";
mysql_query($sql);

//ユーザー名とパスワードをチェックしません

// 次のようなユーザーが入力したものであれば何でも構いません:

$_POST['ユーザー'] = 'ジョン';
$_POST['pwd'] = "' OR ''='";

// いくつかのコード...

mysql_close($con);

?>SQL クエリは次のようになります:


ユーザーから*を選択

WHERE user='john' AND passwd='' OR ''='' これは、ユーザーが有効なパスワードを入力する必要がないことを意味します


ログイン

addSlashes()

定義:addslashes() 関数は、指定された定義済み文字の前にバックスラッシュを追加します。
構文: addslashes(string)
注: デフォルトでは、PHP ディレクティブ magic_quotes_gpc はすべての GET、POST、COOKIE に対してオンになっています

データは自動的にaddslashes()を実行します。 magic_quotes_gpc によってエスケープされた文字列には使用しないでください

addslashes()、これは二重レベルのエスケープを引き起こすためです。このような状況に遭遇した場合は、関数を使用できます

get_magic_quotes_gpc() を使用して検出します。

サンプルコードが長すぎるため、機能説明のリンクを貼っておきます

関連機能

$str = "あなたの名前はオライリーですか?";


// 出力: あなたの名前はオライリーですか?

エコーはスラッシュを追加します($str);

?>

StripSlashes() はバックスラッシュ文字を削除します

tripslashes() 関数は、addslashes() 関数によって追加されたバックスラッシュを削除します。

文法

ストリップスラッシュ(文字列)


エコー・ストリップスラッシュ(「ジョン・アダムスって誰?」);

?>

http://www.bkjia.com/PHPjc/629711.html

tru​​ehttp://www.bkjia.com/PHPjc/629711.html技術記事データのセキュリティとインジェクションを防ぐために、$_GET で取得した文字列をフィルターする必要があります。最初は自分でフィルター関数を作成しました。その後、PHP チュートリアルに付属しているフィルター関数を見つけたので、addla を追加しました。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。