ホームページ > バックエンド開発 > PHPチュートリアル > PHPでSQLインジェクションを防ぐ具体的な方法を詳しく解説(テスト合格)_PHPチュートリアル

PHPでSQLインジェクションを防ぐ具体的な方法を詳しく解説(テスト合格)_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:30:02
オリジナル
957 人が閲覧しました

優れた PHP プログラマーは、コードをスムーズに記述できることに加えて、プログラムを安全な環境に保管する能力も必要です。今回はPHPでSQLインジェクションを防ぐ方法を説明します。

Web サイトのセキュリティに関しては、SQL インジェクションについて言及する必要があります。ASP を使用したことがある場合、PHP は比較的高いセキュリティを備えている必要があります。これは、MYSQL4 より前のバージョンでは SQL インジェクションがサポートされていないためです。 php.ini の magic_quotes_gpc が On の場合。

送信された変数内のすべての ' (一重引用符)、" (二重引用符)、(バックスラッシュ)、および null 文字はバックスラッシュを含むエスケープ文字に自動的に変換され、SQL インジェクションに多大な問題を引き起こします。

明確に見てください: それは単に「面倒」です~ これは、PHP が SQL インジェクションを防止するという意味ではありません。この本では、SQL ステートメントを ASCII エンコーディングに変換するなど、インジェクトされたステートメントのエンコーディングを変更することでエスケープを回避する方法について説明しています。 char (100,58,92,108,111,99,97,108,104,111,115,116...))、または 16 進エンコーディング、または他の形式のエンコーディングに変換されると、エスケープ フィルタリングがバイパスされます。

あ。 magic_quotes_gpc を開くか、addslashes() 関数を使用します

PHP の新しいバージョンでは、magic_quotes_gpc がオンになっている場合でも、addslashes() 関数を使用するときに競合は発生しません。ただし、バージョンの互換性を高めるために、転送を使用する前に magic_quotes_gpc のステータスを確認することをお勧めします。関数を使用するか、直接オフにする場合、コードは次のとおりです:

SQL インジェクションを防ぐための PHP コード

コードをコピー コードは次のとおりです:
// エスケープ文字を削除します
functiontripslashes_array($array) {
if (is_array($array)) {
foreach ($array as $k =>) ; $ v) {
$array[$k] = ストリップスラッシュ($v);
}
} else if (is_string($array)) {
$array = ストリップスラッシュ($array);
return $array;
}
@set_magic_quotes_runtime(0);
// magic_quotes_gpc のステータスを決定する
if (@get_magic_quotes_gpc()) {
$_GET =tripslashes_array($_POST); OKIE = ストリップスラッシュ_配列( $_クッキー );
magic_quotes_gpc のエスケープを削除して、addslashes 関数を使用します。コードは次のとおりです。

SQL インジェクションを防ぐための PHP コード



コードをコピーします

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

$keywords = addlashes($keywords);

$keywords = str_replace("_","_",$keywords);//Escape "_ "

$keywords = str_replace("%","%",$keywords);//エスケープ "%"

最後の 2 つの str_replace 置換エスケープの目的は、ハッカーが攻撃のために SQL エンコーディングを変換するのを防ぐことです。
b. 文字フォーマット (タイプ) を強制する


多くの場合、xxx.php?id=xxx のような URL を使用する必要があります。一般に、$id は整数変数であり、攻撃者が $id を攻撃ステートメントに改ざんするのを防ぐために、変数とコードを強制する必要があります。以下の通り:
SQL インジェクションを防ぐための PHP コード

$id=intval($_GET['id']);

もちろん、他の変数タイプもあります。必要に応じて、フォーマットを強制してみてください。

c。 SQL ステートメントには引用符付きの変数が含まれています

これは非常にシンプルですが、習慣を形成するのも簡単です。まず、次の 2 つの SQL ステートメントを見てみましょう。

SQLコード

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

SELECT * FROM Article WHEREarticleid='$id'

SELECT * FROM Article WHEREarticleid=$id

どちらの記述方法もさまざまなプログラムで共通ですが、セキュリティが異なります。最初の文では変数 $id を一重引用符で囲んでいるため、正しい SQL ステートメントが含まれている場合でも、送信する変数は文字列になります。 2 番目の文は異なります。変数は一重引用符で囲まれていないため、スペースが含まれている限りすべて SQL ステートメントとして扱われます。そのため、変数に引用符を付ける習慣を身に付ける必要があります。 SQL ステートメントで。

d.URL 擬似静的

URL 擬似静的とは、Discuz のような URL 書き換えテクノロジーです。同様に、すべての URL を xxx-xxx-x.html のような形式に書き換えることをお勧めします。これは SEO に有益であり、一定レベルのセキュリティを実現します。ただし、PHP で SQL インジェクションを防ぐには、特定の「通常の」基盤が必要であることが前提となります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/767606.html技術記事優秀な PHP プログラマーは、コードをスムーズに記述できることに加えて、プログラムを安全な環境に保つ能力も必要です。今日は、PHP で SQL インジェクションを防ぐ方法を説明します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート