我应该将$ _REQUEST更改为$ _POST

时间:2010-06-07 06:23:47

标签: php mysql

嘿伙计们快速提问,我有一个复选框系统,只需点击一下按钮就可以检查和删除项目列表。我目前使用请求并完成工作,但我想知道$ _REQUEST是否存在某种安全风险或不当。如果有人有任何建议我会很感激。我应该改成$ _POST吗?如果是这样,最好的方法是什么?

 foreach ($_REQUEST as $key=>$value) {
    if (substr($key,0,3)==="img") {
      $id = substr($key,3);
if(isset($_REQUEST['Delete'])) { 

 $sql = 'SELECT file_name,username FROM images WHERE id=?';
$stmt = $conn->prepare($sql);
$result=$stmt->execute(array($id));

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$image=$row['file_name'];
$user=$row['username'];
$myFile = "$user/images/$image";
unlink($myFile);
}


<input id=\"img".$id."\" name=\"img".$id."\" type=\"checkbox\">

3 个答案:

答案 0 :(得分:3)

是。你应该把它改成$ _POST。始终在$ _REQUEST上使用适当的Superglobals。

由于数据在$ _REQUEST中的汇编顺序,很可能是键不符合您的预期。这可能会导致严重的安全隐患。参见:

答案 1 :(得分:0)

随着您的应用程序使用$_REQUEST而不是相应的数组增长,肯定会使您的文档变成一场噩梦。使用$_REQUEST获取$_GET$_POST只是不必要。

答案 2 :(得分:0)

不是真正的安全问题(攻击者无论如何都可以制作他想要的任何GET / POST请求,甚至可以通过CSRF从合法用户的浏览器发送),但是存在维护问题,因为不小心cookie值会覆盖请求参数。如果您接受GET请求,也可能会遇到麻烦。删除东西 - 假设GET请求是安全的,用户代理可以自由发送它们。对于更改数据或内部状态的请求,以及其他所有内容的GET,您应该只接受POST。