サニタイジング:私はget_magic_quotes_gpc()
がで廃止されていることを知っている以外、素晴らしいです入力PHP
function mysql_entities_fix_string($connection, $string)
{
return htmlentities(mysql_fix_string($connection, $string));
}
function mysql_fix_string($connection, $string)
{
if (get_magic_quotes_gpc()) $string = stripslashes($string);
return $connection->real_escape_string($string);
}
現在のバージョンのPHP。いくつかの異なるリソースを見て、私はget_magic_quotes_gpc()
の代わりにSQLのprepared statementを使うべきだということを学びました。私はまだ文字列の機能的なクリーニングを行う必要があると推測するので、それは私を混乱させる。
私は(それが起こる、私はこの時には比較的新しいです)間違っていない限り、これが大きい無なしにかかわらず、準備されたステートメントの:ない
$username = $_POST['username'];
$stmt = $conn->prepare("SELECT password FROM users WHERE username=?");
$stmt->bind_param("s", $username");
$stmt->execute();
...
が、そのような場合、これは、許容できる衛生プロセス:
また、他のエスケープ機能を追加する必要がありますか?
準備されたステートメントを使用すると、他のものは実行されません。 – AbraCadaver
準備されたステートメントは、この種のサニタイズの必要性を否定します。データに含めたくないその他の項目は確認できますが、クエリ自体をデータから保護する必要はありません。人々がデータを「サニタイズ」しなければならなかった理由は、データをクエリに直接連結し、そのデータ*を実行可能コード*として扱うからです。クエリパラメータを持つプリペアドステートメントはその値をコードとして踏み込んでいないので、問題は解決しません。 – David
ナパームとその本を燃やし、あなたのお金を取り戻す。 – PeeHaa