ホームページ  >  記事  >  バックエンド開発  >  SQL インジェクションを防ぐ最も完全な方法

SQL インジェクションを防ぐ最も完全な方法

WBOY
WBOYオリジナル
2016-07-29 08:56:111451ブラウズ
(1) mysql_real_escape_string -- 接続の現在の文字セットを考慮して、SQL ステートメントで使用される文字列内の特殊文字をエスケープします

次のように使用します:

?

and

1

2

3

$sql= "select count(*) usernameasctr from users where username

='".mysql_real_escape_string($username)."'and

password==limit 1";

'".mysql_real_escape_string($username)."'
🎜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

functioninject_check($sql_str) {

    returneregi('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 「

functionverify_id($id$sql_str

);    if(!$id

}

        exit('没有提交参数!'関数

verify_id(    $idelseif(inject_check($id=null) {

        exit('提交的参数非法!');

    ifelseif(!is_numeric($id(!$id

) {        exit('提交的参数非法!'

    

}     $id= intval($idelseif

(inject_check(

      

    return$id$id)) {

elseiffunctionstr_check( $str) {

    if(!

is_numeric

        $str= addslashes($str($id)) {

    

    $str= str_replace("_"} "_"$str $id

=     $str= str_replace("%"intval"%"($id$str);

      

   return$str

return

$idfunctionpost_check($post;

    if}

関数        $post= addslashes($post);

    str_check(

$str

    $post= str_replace("_") { "_" $postif(!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 チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。