(1) mysql_real_escape_string -- 接続の現在の文字セットを考慮して、SQL ステートメントで使用される文字列内の特殊文字をエスケープします次のように使用します:
?
1
2 3
|
$sql = "select count (*)
username as ctr from users where username
= '".mysql_real_escape_string($username)."' and
password= =limit 1"; '".mysql_real_escape_string($username)."' | and
🎜password=🎜🎜'"のユーザーからの🎜🎜ctr。
mysql_real_escape_string($pw)."'🎜🎜制限 1";🎜🎜🎜🎜🎜🎜🎜
ユーザー入力への悪意のある SQL インジェクションを回避するために、ユーザー入力のラッパーとして
mysql_real_escape_string()
を使用します。
(2) SQLインジェクションを防ぐためにmagic_quotes_gpcをオンにする
php.iniにmagic_quotes_gpc = Offという設定があります
これがオンになっていると、によって送信されたSQLクエリが自動的に変換されます。ユーザー
たとえば、' を ' に変換することなどは、SQL インジェクションを防ぐ上で重要な役割を果たします。
magic_quotes_gpc=Off の場合は、addslashes() 関数を使用します
(3) カスタム関数
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function inject_check( $sql_str )
{
return eregi ( 'select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile' return$sql_str ); eregi( のselect|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile 「function verify_id( $id 、
$sql_str
); if (! $id
}
exit ( '没有提交参数!' 関数
verify_id( $id elseif (inject_check( $id =null)
{
exit ( '提交的参数非法!' );
if elseif (! is_numeric ( $id (! $id
)
{ exit ( '提交的参数非法!'
}
$id = intval ( $id elseif (inject_check(
return $id $id ))
{
elseiffunction str_check( $str ) {
if (! is_numeric $str = addslashes ( $str ( $id ))
{
$str = str_replace ( "_" }
"_"
$str $id
= $str = str_replace ( "%" intval "%" ( $id$str );
return $str
return
$idfunction post_check( $post ;
if }
関数 $post = addslashes ( $post );
str_check( $str $post = str_replace ( "_" ) {
"_" $post if (!get_magic_quotes_gpc())
{$
$ Str $post = str_replace ( "%" = "%" スラッシュを追加 ($post $ Str );
$post = nl2br ( $post //
フィルター
$post = htmlspecialchars( $post }
🎜🎜 🎜🎜$str🎜🎜= 🎜🎜str_replace🎜🎜(🎜🎜"_"🎜🎜,
🎜🎜"_"🎜🎜、
🎜🎜$str🎜🎜);
🎜🎜🎜🎜 🎜🎜$str🎜🎜= 🎜🎜str_replace🎜🎜(🎜🎜"%"🎜🎜,
🎜🎜「%」🎜🎜、
🎜🎜$str🎜🎜);
🎜🎜🎜🎜 🎜 🎜🎜🎜 🎜🎜return🎜🎜$str🎜🎜;
🎜🎜🎜🎜}
🎜🎜🎜🎜関数🎜🎜post_check(🎜🎜$post🎜🎜)
{ 🎜🎜🎜🎜 🎜🎜if🎜🎜(!get_magic_quotes_gpc())
{🎜🎜🎜🎜
🎜🎜🎜🎜 🎜🎜$post🎜🎜= 🎜🎜str_replace🎜🎜(🎜🎜"_"🎜🎜,
🎜🎜"_"🎜🎜、
🎜🎜$post🎜🎜);
🎜🎜🎜🎜 🎜🎜$post🎜🎜= 🎜🎜str_replace🎜🎜(🎜🎜"%"🎜🎜,
🎜🎜「%」🎜🎜、
🎜🎜$post🎜🎜);
🎜🎜🎜🎜 🎜🎜$post🎜🎜= 🎜🎜nl2br🎜🎜(🎜🎜$post🎜🎜);
🎜🎜🎜🎜 🎜🎜$post🎜🎜= htmlspecialchars(🎜🎜$post🎜🎜);
🎜🎜
return $post
}}
|
上記は、SQL インジェクションを防ぐための最も完全な方法をあらゆる側面を含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。