2010-06-07 33 views
0

嘿家伙快速问题,我有一个复选框系统,其中的项目列表可以检查和删除点击一个按钮。我目前使用请求,它的工作,但我想知道如果$ _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\"> 
+0

可能重复[使用$ _REQUEST \ [\]?]有什么问题(http://stackoverflow.com/questions/2142497/whats-wrong-with-using-request) – Gordon 2010-06-07 06:28:41

回答

3

是的。您应该将其更改为$ _POST。始终使用超过$ _REQUEST的适当Superglobals。

由于数据在$ _REQUEST中汇编的顺序,很可能这些键不会是您所期望的。这可能会导致严重的安全隐患。请参阅:

0

当你的应用程序使用增长的$_REQUEST代替相应的阵列肯定会让你的文档的噩梦。使用$_REQUEST来获得$_GET$_POST的值是只是不必要的。

0

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

相关问题