如果我直接在bindParam(mysqli)中使用$ _POST值,会不会出现安全问题?

问题描述 投票:-1回答:1

我一直在阅读有关使用$ _POST值直接在isert语句中使用的方法,并且了解这是麻烦的诱因。我读过的任何帖子中都不清楚的是-假设我的表单向我的mysqli插入脚本发送了7个项目,并且我使用这样的发布值:

    $stmt = $mysqli->prepare("INSERT INTO `advertisements` (`from`, `r_u_res`, `email`, `blockname`, `floorno`, `doorno`, `content`) VALUES (?, ?, ?, ?, ?,?,?)");
    $stmt->bind_param('sssssss', $_POST['from'], $_POST['rures'], $_POST['email'], $_POST['blockname'], $_POST['floorno'], $_POST['doorno'], $_POST['content']);

    $stmt->execute(); 
    $stmt->close();

这是正确的方法吗?还是应该先将发布的值存储在新变量中,然后在绑定时使用该变量? -像这样:

    $postedfrom = $_POST['from'];
    $postedrures = $_POST['rures'];
    $postedemail = $_POST['email'];
    $postedblockname = $_POST['blockname'];
    $postedfloorno = $_POST['floorno'];
    $posteddoorno = $_POST['doorno'];
    $postedcontent = $_POST['content'];

    $stmt = $mysqli->prepare("INSERT INTO `advertisements` (`from`, `r_u_res`, `email`, `blockname`, `floorno`, `doorno`, `content`) VALUES (?, ?, ?, ?, ?,?,?)");
    $stmt->bind_param('sssssss', $postedfrom, $postedrures, $postedemail, $postedblockname, $postedfloorno, $posteddoorno, $postedcontent);

    $stmt->execute(); 
    $stmt->close();      

[我看到了一个帖子OO mysqli prepared statements help please,答案似乎确实与上面的代码类似,但是我想知道是否像第一个代码那样做会带来安全问题...

php security post mysqli bindparam
1个回答
0
投票

从安全的角度来看,这两种形式都是等效的,因为php首先解析要在方法调用中传递给$stmt->bind_param的值,因此该函数在两种情况下都看到完全相同的值。

ps:两个摘要对我来说都不错。

© www.soinside.com 2019 - 2024. All rights reserved.