我意识到用户输入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 ;
}
?>
答案 0 :(得分:3)
如果您隐含信任从客户端获取的任何数据,您的应用程序不安全。期间。
普通?对于高流量/热门网站,是的。你应该担心吗?这取决于你必须失去什么。如果你不关心数据(或代码)是否被破坏/被吹走,和/或不关心服务器是否被篡改,那么安全性对你来说可能不是问题。
[soapbox]你需要明白,如果你养成这种草率编码的习惯,你将来会伤到自己。例如,如果我正在采访你并发现你不了解sql-injection问题,那么无论你有什么“工作经验”,我都不会雇用你除了初级开发人员以外的任何职位。 [/肥皂盒]
就是不要这样做。严重。
答案 1 :(得分:3)
您的数据肯定需要消毒。 $ _POST或$ _GET中的任何内容都可能很容易被用户操纵。事实上,如果您想尝试一下,我建议您下载Fiddler。
答案 2 :(得分:3)
是否需要对所有POST数据进行清理?
没有
但是你在某处使用的所有外部数据总是需要消毒,无论是来自人类,机器人还是其他来源。
但是,使用一个卫生方法无法做到这一点。对于您计划使用数据的每种方式,都需要单独进行卫生。对您在代码中显示的数据运行全局卫生方法只会破坏数据,并且无法提供足够的安全性。
答案 3 :(得分:2)
简短回答:是的。客户端的任何东西都需要进行清理,因为人们可以随意修改网页客户端的代码。
答案 4 :(得分:0)
如果您已经评估,则post变量中的PHP代码只会是一个问题。我真的没想到你会这样做的任何理由。
恕我直言,你总是更好地清理你得到的数据。
答案 5 :(得分:0)
回答问题,是否所有帖子数据都必须消毒在我看来:没有。
为什么呢?因为有时你需要从用户那里传递PHP,JavaScript或HTML代码。
实施例?查看一些CMS系统,它们允许您格式化代码(使用一些客户端WYSIWYG编辑器,没有任何特殊标记),甚至可以将PHP代码插入某些页面(例如,Drupal允许它,如果你真的需要它并以这种方式配置它)。您也可能希望能够通过某种形式提交某些JS以包含在特定页面中。
所以,总结一下:POST应该被消毒,但有些情况是例外。因此,说应该进行消毒是正确的,但不必进行消毒。