このPHPのMySQL文はどれくらい安全ですか?それはSQLインジェクションの脆弱性ですか?PHPスクリプト内のこのMySQL文はどのように安全ですか?
$sql = sprintf("INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())",
mysql_escape_string($_SESSION['client']['id']),
mysql_escape_string($_POST['id']));
このPHPのMySQL文はどれくらい安全ですか?それはSQLインジェクションの脆弱性ですか?PHPスクリプト内のこのMySQL文はどのように安全ですか?
$sql = sprintf("INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())",
mysql_escape_string($_SESSION['client']['id']),
mysql_escape_string($_POST['id']));
はい%dは数字のみを返すため、文字列をエスケープする必要はありません。一重引用符を使用するとスピードも向上します。したがって、安全で速い方法は次のとおりです。
いいえ、脆弱ではありません。
ここにのクエリをPHPで安全にする方法の詳細な記事です。
http://www.tech-evangelist.com/2007/11/05/preventing-sql-injection-attack/
それは私には正常に見えます。
実際には、sprintf( "%d")は数字のみを返す可能性があるので、この場合はmysql_escape_stringを使用する必要がありますか?
最近のベンチマークでは、シングルクォートでこのスピードを改善していますか? – Salaryman
ベンチマークはありませんが、常識的なことです。文字列をsprintfに送る前に、二重引用符で、インタプリタは$変数と他のエスケープシーケンスを探します。一重引用符ではありません。速度の差は実際に差をつけるには小さすぎます。 – jimyi