私はこのラインを持っている:SQLインジェクション:このラインは安全ですか?
$sql = "UPDATE votes SET up=up+1 WHERE id='{$p}'";
今から私はSQLインジェクションの一つの方法は、ハッカーは、追加の情報を追加することができ、適切ではない「クロージング」SQLクエリによって引き起こされる何を読んで。
up=up+1
は私にとって安全ですが、私がこのように設定した場合、私にはそれが "閉鎖"されて動作しません。
ローアップタイプがint(11)
の場合は違いがあります。
更新:
$p
は、変数を介してユーザの入力を受け付けないので
function sanitize($foo) {
if(get_magic_quotes_gpc() == true) {
$foo = stripslashes($foo);
}
return mysql_real_escape_string(htmlspecialchars($foo));
}
このステートメントは、このステートメントの前に$ pが常に数字であることを確認する必要があることを除いて、かなり安全です。 –
決して消毒しないでください。エスケープ。サニタイズは、攻撃のあらゆる可能な経路を知っており、特にそのためのフィルタリングに依存します。新しい攻撃経路が発見されると、あなたの機能は役に立たない。エスケープはすべての攻撃を処理します。 –
SQLインジェクション攻撃が懸念される場合は、ストアドプロシージャとビューを使用してデータベースアクセスを制限する必要があります。つまり、特に$ pは関数によってチェックされているので、特定のクエリはかなり安全です。 –