是否需要对所有POST数据进行清理?

时间:2011-06-07 19:40:22

标签: html post

我意识到用户输入POST数据需要转义,但非用户发布数据呢? 我相信可以拍摄一个网页的快照,并将新的恶意代码插入一个表格,该表格将与$ _POST一起提交,这可能会导致问题,例如$ _POST包含PHP代码。这是一个常见甚至可能的漏洞吗?

以下内容如何,​​这就足够了:

 <?php
function strip_Bad_Chars($data){

$data = preg_replace('/[^0-9a-zA-Z\.\_]/', '_', $data) ;

return $data ;
 }

function Sanitize($data){
if(is_array($data)){
    foreach($data as $key => $value){
        $data[$key] = strip_Bad_Chars($value) ;
    }
}else{
    $data = strip_Bad_Chars($data) ;
}

return $data ;
}
?>

6 个答案:

答案 0 :(得分:3)

如果您隐含信任从客户端获取的任何数据,您的应用程序不安全。期间。

普通?对于高流量/热门网站,是的。你应该担心吗?这取决于你必须失去什么。如果你不关心数据(或代码)是否被破坏/被吹走,和/或不关心服务器是否被篡改,那么安全性对你来说可能不是问题。

[soapbox]你需要明白,如果你养成这种草率编码的习惯,你将来会伤到自己。例如,如果我正在采访你并发现你不了解sql-injection问题,那么无论你有什么“工作经验”,我都不会雇用你除了初级开发人员以外的任何职位。 [/肥皂盒]

就是不要这样做。严重。

答案 1 :(得分:3)

您的数据肯定需要消毒。 $ _POST或$ _GET中的任何内容都可能很容易被用户操纵。事实上,如果您想尝试一下,我建议您下载Fiddler

答案 2 :(得分:3)

  

是否需要对所有POST数据进行清理?

没有

但是你在某处使用的所有外部数据总是需要消毒,无论是来自人类,机器人还是其他来源。

  • 在将字符串注入SQL查询之前,需要使用正确的函数对其进行转义,或者将其放入参数化查询中。
  • 在将某些数据用作命令行调用的参数之前,需要使用正确的函数对其进行转义。
  • 依此类推,等等。

但是,使用一个卫生方法无法做到这一点。对于您计划使用数据的每种方式,都需要单独进行卫生。对您在代码中显示的数据运行全局卫生方法只会破坏数据,并且无法提供足够的安全性。

答案 3 :(得分:2)

简短回答:是的。客户端的任何东西都需要进行清理,因为人们可以随意修改网页客户端的代码。

答案 4 :(得分:0)

如果您已经评估,则post变量中的PHP代码只会是一个问题。我真的没想到你会这样做的任何理由。

恕我直言,你总是更好地清理你得到的数据。

答案 5 :(得分:0)

回答问题,是否所有帖子数据都必须消毒在我看来:没有

为什么呢?因为有时你需要从用户那里传递PHP,JavaScript或HTML代码

实施例?查看一些CMS系统,它们允许您格式化代码(使用一些客户端WYSIWYG编辑器,没有任何特殊标记),甚至可以将PHP代码插入某些页面(例如,Drupal允许它,如果你真的需要它并以这种方式配置它)。您也可能希望能够通过某种形式提交某些JS以包含在特定页面中。

所以,总结一下:POST应该被消毒,但有些情况是例外。因此,说应该进行消毒是正确的,但不必进行消毒。