2011-03-04 3 views
1

可能性の重複:
Are dynamic mysql queries with sql escaping just as secure as prepared statements?mysqli_real_escape_stringを使用してクエリ文字列を保護していますか?

は、クエリを確保するだけの十分なmysqli_real_escape_stringを使用していますか?データベースを安全に照会しようとすると、さらに検討する必要がありますか?

+0

@irc I *は*作業中です。それはちょうど私が言うつもりだったので、今あなたの答えを使用するかもしれません。 – NullUserException

+0

準備済みの文を使用できます。 ircmaxwellのコメントのリンクに従ってください。 – NullUserException

+0

あなたは何をしているのかの例を見せてもらえますか? –

答えて

2

どこでも正しく使用されている場合real_escape_stringはオプションです。次のコードを検討してください:

$page = $_GET['page']; 
$sql = 'SELECT `name` FROM `user` WHERE `id` = ', mysqli_real_escape_string($page); 

安全かどうかを確認します。 real_escape_ 文字列は、引用符で囲んだ文字列をエスケープするためにのみ使用できます。 $page1 OR id IN (2,3,4,5,6,7,8,9)になります→引用符はなく、実際のエスケープはありません。正しいデータ型(int)にキャストすると、この場合に役立ちます。あなたは準備されたステートメントを使うほうがいいですが、使い方が簡単ではありません。

+1

これは決して*エスケープするべきではありません*整数です。型を明示的にキャストするか強制するか... – ircmaxell

+0

'mysqli_real_escape_string()'関数は通常、データベースの引数との接続を必要としませんか? –

+1

@SébastienGarcia-Roméo:既定では、現在アクティブな接続が使用されます(これは最近開いたものだと思います)。 – knittl

関連する問題