ホームページ  >  記事  >  バックエンド開発  >  PHP 関数を使用して SQL インジェクションを解決する_PHP チュートリアル

PHP 関数を使用して SQL インジェクションを解決する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:09:20961ブラウズ

SQL インジェクションの問題は ASP に大きな波紋を引き起こしました。もちろん、国内外の多くの有名な PHP プログラムも「被害」を受けました。 SQLインジェクションの詳細についてはネット上に記事が多すぎるのでここでは紹介しません。
Web サイトスペースの php.ini ファイル内の magic_quotes_gpc がオフに設定されている場合、フォームによって送信されたコンテンツには一重引用符 (' ) などの機密文字が含まれる可能性があるため、PHP は機密文字の前にバックスラッシュ () を追加しません。 、SQL インジェクションの脆弱性につながります。この場合、addslashes() を使用して問題を解決できます。これは、機密文字の前にバックスラッシュを自動的に追加します。
ただし、上記の方法は、magic_quotes_gpc=Off の場合にのみ適用されます。開発者としては、各ユーザーの magic_quotes_gpc がオンかオフかわかりません。すべてのデータが addslashes() で使用される場合、それは「無実の人々を無差別に殺害する」ことになりませんか。 magic_quotes_gpc=On で、addslashes() 関数が使用されている場合を見てみましょう: //変数 $_POST['message'] がフォームから送信された場合、コンテンツはトムの本です
// MySQL データベースに接続するコードを追加します。自分で記述します
//$_POST['message'] の機密文字の前にバックスラッシュを追加します
$_POST['message'] =addslashes($_POST['message']) ) ;

//magic_quotes_gpc=On なので、機密性の高い文字の前にバックスラッシュを再度追加します
$sql = "INSERT INTO msg_table VALUE('$_POST[message]');";

//リクエストを送信し、内容を入力しますはデータベースに保存されます
$query = mysql_query($sql);

//このレコードをデータベースから抽出して出力すると、トムの本が表示されます
?>

この場合、magic_quotes_gpc=Onこの環境では、入力されたすべての一重引用符 (') が (') になります...
実際、この問題は get_magic_quotes_gpc() 関数を使用して簡単に解決できます。 magic_quotes_gpc=On の場合、この関数は TRUE を返し、magic_quotes_gpc=Off の場合、FALSE を返します。この時点で、問題が解決したことに多くの人が気づいたはずです。コードを見てください: //magic_quotes_gpc=Off の場合は、船荷証券に送信された $_POST['message'] の機密文字にバックスラッシュを追加します
//magic_quotes_gpc=On の場合は追加しないでくださいそれら
if (!get_magic_quotes_gpc()) {
$_POST['message'] =addslashes($_POST['message']);
} else {}
?>
実際、この時点で問題は次のとおりです。解決されました。ここでもう 1 つの小さなトリックを紹介します。
場合によっては、フォームに複数の変数 (場合によっては数十個) が送信されることがあります。では、addslashes() を何度もコピー&ペーストするのは少し面倒でしょうか?フォームまたは URL から取得したデータは $_POST、$_GET などの配列形式で表示されるため、「軍隊を一掃」できる関数をカスタマイズします: function quotes($content)
{
//magic_quotes_gpc=Off の場合、処理を開始します
if (!get_magic_quotes_gpc()) {
//$content が配列かどうかを判断します
if (is_array($content)) {
//$content が配列の場合, 次に、その各要素を処理します
foreach ($content as $key=>$value) {
$content[$key] =addslashes($value);
}
} else {
//if $content If itは配列ではない場合、一度だけ処理されます
addslashes($content);
}
} else {
//magic_quotes_gpc=On の場合、処理されません
}
//Return $content
return $コンテンツ;
}
>


?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314550.html技術記事 SQL インジェクションの問題は ASP に大きな波紋を引き起こし、もちろん国内外の多くの有名な PHP プログラムが「被害」を受けました。 SQLインジェクションの詳細についてはネット上に記事が多すぎるのでここで…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。