0

'".$string."'以下の2つのクエリのオンとの違いは何ですか'$string'

SELECT * FROM users WHERE UserName='".$USERNAME."' AND Pass='".$PASS."'
/* AND */
SELECT * FROM users WHERE UserName='$USERNAME' AND Pass='$PASS'

異なる場合、セキュリティにとって何が良いですか?文字列は常に入力時に保護されますが、上記の違いについてのみです

編集: 私はPHP JUSTで上記のクエリを使用し、それが必要です

4

2 に答える 2

3

PHPでは、少なくとも2つの間にまったく違いはありません。まったく同じことを行います。どちらもSQLインジェクションに対して同等に脆弱です。

于 2013-01-28T19:10:46.133 に答える
2

あなたの場合、それらの間に違いはありません。

ただし、連結している文字列に特殊文字(など)が含まれていない場合は、違いがわかります。'

$b = 'b';
$string = "a" . $b . "c";

と同等ではありません:

$b = 'b';
$string = "a$bc";

$bcPHPは変数を探すからです。しかし、これは次と同等です:

$b = 'b';
$string = "a{$b}c";

同様にあなたの例は以下と同等です:

SELECT * FROM users WHERE UserName='{$USERNAME}' AND Pass='{$PASS}'

ただし、注意してください。一重引用符で囲まれた文字列:

$b = 'b';
$string = 'a{$b}c';

文字通りに読み取られa{$b}cます。

最後に、@ duskwuffが警告しているように、 SQLインジェクションに注意する必要があります。

于 2013-01-28T19:16:56.190 に答える