ホームページ  >  記事  >  バックエンド開発  >  SQL インジェクションを防ぐための PHP 関数の概要_PHP チュートリアル

SQL インジェクションを防ぐための PHP 関数の概要_PHP チュートリアル

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

具体的な使い方

スラッシュを追加すると SQL インジェクションが防止されます

国内の多くのPHPプログラマは未だにSQLインジェクションを防ぐためにaddslashesに依存していますが、中国語でのSQLインジェクションを防ぐために全員がチェックを強化することをお勧めします。 addslashes の問題は、ハッカーが単一引用符の代わりに 0xbf27 を使用できることですが、addslashes は 0xbf27 を 0xbf5c27 に変更するだけで、有効なマルチバイト文字となる 0xbf5c は依然として単一引用符とみなされ、そのため addslashes は正常にインターセプトできません。

もちろん、addslashes は役に立たないわけではありません。マルチバイト文字の場合は、mysql_real_escape_string を使用します。

さらに、phpマニュアルのget_magic_quotes_gpcについては

例:

コードは次のとおりです


関数 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 を返す
}
?>

または

関数 inject_check($sql_str)
{
return eregi('select|insert|update|delete|'|
関数 verify_id($id=null)
{
if (!$id) { exit('パラメータが送信されていません!') } // 空かどうかを判断します
elseif (inject_check($id)) { exit('送信されたパラメータが不正です!') } // インジェクション判定
; elseif (!is_numeric($id)) { exit('送信されたパラメータは不正です!' } // 数値判定
; $id = intval($id); // 整数化
$id を返す
}
?>

string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )

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

注: mysql_real_escape_string() は % と _ をエスケープしません。

mysql_real_escape_string

例#1 mysql_real_escape_string() の例

コードは次のとおりです

$item = "ザックとデリックのラップトップ" ;
$escaped_item = mysql_real_escape_string ( $item );
printf ( "エスケープされた文字列: %sn" , $escaped_item );
?>

上記の例では、次の出力が生成されます:

エスケープ文字列: ザックとデリックのラップトップ

mysql_escape_string

この関数は、mysql_query() で安全に使用できるように、unescaped_string をエスケープします。

注: mysql_escape_string() は % と _ をエスケープしません。

この関数は、mysql_real_escape_string() が接続ハンドルを受け入れ、現在の文字セットに従って文字列を転送することを除いて、mysql_real_escape_string() とまったく同じです。 mysql_escape_string() は接続パラメータを受け入れず、現在の文字セット設定を気にしません。

例1. mysql_escape_string()の例

コードは次のとおりです

$item = "ザックのラップトップ";
$escaped_item = mysql_escape_string($item);
printf ("エスケープされた文字列: %sn", $escaped_item);
?>
出力:
エスケープされた文字列: Zak のラップトップ

2 つの関数 mysql_real_escape_string と mysql_escape_string の違い:

Mysql_real_escape_string は (PHP 4 >= 4.3.0、PHP 5) でのみ使用できます。それ以外の場合は、mysql_escape_string のみを使用できます。この 2 つの違いは、mysql_real_escape_string は接続の現在の文字セットを考慮するのに対し、mysql_escape_string は考慮しないことです。

総合的に判断して対処することができます

要約すると:
コードは次のとおりです
関数 cleanuserinput($dirty){
if (get_magic_quotes_gpc()) {
$clean = mysql_real_escape_string(ストリップスラッシュ($dirty)); }その他{
$clean = mysql_real_escape_string($dirty); }
$clean を返します;
}

*addslashes() は強制的に追加されます

* mysql_real_escape_string() は文字セットを決定しますが、PHP バージョンの要件があります;

* mysql_escape_string は接続の現在の文字セットを考慮しません。

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

tru​​ehttp://www.bkjia.com/PHPjc/372028.html技術記事 SQL インジェクションを防ぐための addslashes の具体的な使用方法 国内の PHP プログラマーの多くは依然として SQL インジェクションを防ぐために addslashes に依存していますが、中国語での SQL インジェクションを防ぐためのチェックを強化することをすべての人に推奨します。 addlashes からの質問...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。