ホームページ >バックエンド開発 >PHPチュートリアル >PHP アンチインジェクション セキュリティ実装プログラム コード_PHP チュートリアル

PHP アンチインジェクション セキュリティ実装プログラム コード_PHP チュートリアル

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

これまでに多くの SQL インジェクション防止コードについて説明してきましたが、参考までに、サーバー スクリプトから始める必要があります。参考までに、PHP でインジェクションを防止する一般的な方法について説明します。

最も一般的なものはおそらく

最初に、magic_quotes_gpc を On に設定し、display_errors を Off に設定します。ID 型の場合は、コードに示すように intval() を使用して整数型に変換します。 $id=intval($id);

それでは、PHP 送信データのフィルタリングの基本原則をご紹介しましょう

1) 変数をデータベースに送信するときは、フィルター処理に addlashes() を使用する必要があります。たとえば、注入の問題は 1 つの addslashes() だけで解決できます。実際、変数値に関しては、 intval() 関数も文字列のフィルタリングに適しています。

2) php.iniでmagic_quotes_gpcとmagic_quotes_runtimeを有効にします。 magic_quotes_gpc は、get、post、cookie の引用符をスラッシュに変更できます。 magic_quotes_runtime は、データベースに出入りするデータの書式設定の役割を果たします。実際、このパラメータは、インジェクションが夢中になっていた昔から非常に人気がありました。

3) システム関数を使用する場合は、安心してシステム関数を使用できるように、escapeshellarg()、escapeshellcmd() パラメータを使用してフィルタリングする必要があります。

4) クロスサイトの場合、strip_tags() と htmlspecialchars() の両方のパラメーターが有効であり、ユーザーが送信した html と php のタグはすべて変換されます。たとえば、山括弧「<」は「<」などの無害な文字に変換されます。

コードは次のとおりですコードをコピー$new = htmlspecialchars("テスト", ENT_QUOTES);

5) 関連関数のフィルタリングについては、先ほどの include()、unlink、fopen() などと同様に、操作を実行したい変数を指定するか、関連する文字をしっかりフィルタリングすれば大丈夫だと思います完璧になります。

2. PHP を使用した簡単なデータ フィルタリング

1) ストレージ: トリム($str)、スラッシュを追加($str)
2) デポジット: ストリップスラッシュ($str)
3) 表示: htmlspecialchars(nl2br($str))

例を共有します

特定のコード:

ストリップタグ($text,);
コードは次のとおりです コードをコピー

//security.php
/**
 * @著者zhengwei
 * @copyright 2007
 */

/*
関数名: inject_check()
機能: 送信された値に SQL インジェクション文字が含まれているかどうかを検出し、インジェクションを防止し、サーバーのセキュリティを保護します
パラメータ: $sql_str: 送信された変数
戻り値: 検出結果、true または false を返します
関数作成者: heiyeluren
*/
関数 inject_check($sql_str) {
Return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str); // フィルター
}

/*
関数名: verify_id()
機能: 送信された ID 値が正当かどうかを検証します
パラメータ: $id: 送信された ID 値
戻り値: 処理後のIDを返す
関数作成者: heiyeluren
*/
関数 verify_id($id=null) {
if (!$id) { exit('パラメータが送信されていません!') } // 空かどうかを判断します
elseif (inject_check($id)) { exit('送信されたパラメータが不正です!') } // インジェクション判定
; elseif (!is_numeric($id)) { exit('送信されたパラメータは不正です!' } // 数値判定
; $id = intval($id); // 整数化

$id を返します
}

/*
関数名: str_check()
機能: 送信された文字列をフィルターします
パラメータ: $var: 処理される文字列
戻り値: フィルタリングされた文字列を返します
関数作成者: heiyeluren
*/
関数 str_check( $str ) {
if (!get_magic_quotes_gpc()) { // magic_quotes_gpc がオンになっているかどうかを判断します
$str = addlashes($str) // フィルター
; }
$str = str_replace("_", "_", $str) // '_' を除外します
; $str = str_replace("%", "%", $str) // '%' を除外します
;
$str を返します
}

/*
関数名: post_check()
機能: 送信された編集コンテンツを処理します
パラメータ: $post: 送信するコンテンツ
戻り値: $post: フィルターされたコンテンツを返します
関数作成者: heiyeluren
*/
関数 post_check($post) {
if (!get_magic_quotes_gpc()) { // magic_quotes_gpc がオンになっているかどうかを判断します
$post = addlashes($post); // magic_quotes_gpc が開かれていない場合に送信されたデータをフィルタリングします
}
$post = str_replace("_", "_", $post) // '_' を除外します
$post = str_replace("%", "%", $post) // '%' を除外します
; $post = nl2br($post) // 変換を入力します
$post = htmlspecialchars($post); // HTMLタグ変換

$post を返す
}


foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strto lower($post_key)] = get_int($post_var);
} その他 {
$post[strto lower($post_key)] = get_str($post_var);
}
}

/* フィルター関数 */
//整数フィルター関数
関数 get_int($number)
{
戻り値 intval($number);
}
//文字列フィルター関数
関数 get_str($string)
{
If (!get_magic_quotes_gpc()) {
return addslashes($string);
}
$string を返します;
}

?>

何かのCMで見かけます

foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$値
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$値
}


このコードはこの関数をすべてのページにロードするため、フィルタリングするとファイルをアップロードするときに問題が発生するようです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629640.html技術記事これまでに多くの SQL インジェクション防止コードについて説明してきましたが、やはりサーバー スクリプトから始める必要があります。PHP でインジェクションを防止する一般的な方法について説明しましょう...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。