0

このようなページを作成する場合、news.php でも news_id が数値かどうかを確認する必要がありますか? それともこれは安全ですか?

index.php:

    if (ctype_digit($_GET['news_id'])) include('news.php');

news.php:

    $query = mysql_query("SELECT * FROM news WHERE news_id = $_GET[news_id]");
    $row = mysql_fetch_assoc($query);

    if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
4

4 に答える 4

2

簡単な答え: はい、そうすべきです。

誰かが index.php を迂回して、news.php をリクエストするかもしれません (そしてそうするでしょう)。

于 2009-02-25T13:01:53.037 に答える
0

MySQL に送信する前に、データをエスケープしてサニタイズする必要があります。誰かが投稿データを介して悪意のあるものを送信しようとしないという保証はありません。

$news_id = (int)$_GET[news_id];

$query = mysql_query("SELECT * FROM news WHERE news_id = " . 
                      mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);

if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
于 2009-02-25T13:03:45.577 に答える
0
  1. 安全ではありません。
  2. チェックしないで、intval(); を使用して整数に変換します。
  3. エスケープまたはキャストせずに GPC 変数を SQL に挿入しないでください。
于 2009-02-25T13:05:08.520 に答える