0

重複の可能性:
SQL インジェクションを防ぐ最善の方法は?

このトピックに関するガイドがたくさんあることは知っていますし、それについてたくさん読んだことがありますが、誰かに直接尋ねて、これについて確認したかったのです.

さて、私の質問に。まず、mysql_real_escape_string をどのくらいの頻度で使用する必要がありますか。

例、次のクエリがある場合:

"SELECT * FROM tabel WHERE id = $_POST['id'] and email LIKE '%hotmail.com' and row = 2"

ここから逃れるには、いったい何が必要なのだろうか?$_POST で十分ですか、それともクエリ内のすべての変数で行う必要がありますか? (saferize(2), saferize(%hotmail.com))?

私が持っている別の質問は、この機能がサニタイズに適しているかどうかです?

function saferize($string) {
    if(get_magic_quotes_gpc() == true) { 
        $string = stripslashes($string);
    }
    $string = htmlspecialchars($string);
    if(strpos($string, '<br />')){
        $string = str_replace('&lt;br /&gt;', '<br />', $string);
    }
    return mysql_real_escape_string($string);
}

<br />データベースに直接挿入しているのでhtmlspecialchars($string)、その目的のために例外を作成しました。これに関するセキュリティ上の考慮事項は何ですか?

返信ありがとうございます。

4

1 に答える 1

0

$_POST['id'] が整数の場合、明示的に整数にキャストし、クエリで結果を使用できます

$id = (int)$_POST['id']
"SELECT * FROM tabel WHERE id = $id and email LIKE '%hotmail.com' and row = 2"

または PDO 準備済みステートメントを使用する

$stmt = $dbh->prepare("SELECT * FROM tabel WHERE id = ? and email LIKE '%hotmail.com' and row = 2");
if ($stmt->execute(array($_POST['id']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
于 2012-11-15T09:46:55.930 に答える