这个PHP代码安全吗?

Oli*_*ton 2 php

只是一个简单的问题:以下PHP代码是否安全?还有什么你认为我可以或应该添加?

    $post = $_GET['post'];

    if(is_numeric($post))
    {
        $post = mysql_real_escape_string($post);
    }
    else
    {
        die("NAUGHTY NAUGHTY");
    }

    mysql_select_db("****", $*****);

    $content = mysql_query("SELECT * FROM tbl_***** WHERE Id='" . $post . "'");
Run Code Online (Sandbox Code Playgroud)

Jør*_*ode 9

在这种特殊情况下,我想is_numeric从SQL注入中节省你的时间(尽管你仍然可以打破SQL语句,参见Alex的回答).但是,我真的认为你应该考虑使用参数化查询(也就是预备语句),因为:

  1. 即使使用非数字类型的参数,它们也会保护您
  2. 添加更多参数时,您不会冒失去输入卫生的风险
  3. 您的代码将更容易编写和阅读

下面是一个例子(其中,$dbPDO连接):

$stmt = $db->prepare('SELECT * FROM tbl_Persons WHERE Id = :id');
$stmt->execute(array(':id' => $_GET['post']));
$rows = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)

有关PHP中参数化SQL语句的更多信息,请参阅: