我正在努力确保所有输入都是安全的,保护服务器和XSS攻击。用strip_tags
和htmlentities
验证输入是否为傻瓜证明系统?我被告知它是,并想确认。即例如:
$re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8");
这应该可以防止任何linux命令和任何html链接正确吗?是否有任何漏洞未被考虑过?
答案 0 :(得分:5)
这完全不是htmlentities
的用途。在将输出发送到浏览器之前,使用htmlentites
对输出进行编码。它与消毒输入无关。处理输入时唯一需要担心的是正确地将数据转储到SQL查询中以防止SQL注入。有关详情,请参阅PHP Data Objects。
strip_tags
在这里非常有用,但您不需要同时使用strip_tags
和 htmlentities
。 htmlentites
的全部目的是阻止标记被解释。考虑这个问题的唯一正确方法是:保留用户输入的内容并使其安全。不要剥离他们的标签,只需编码它们,以便它们在键入时显示。否则,您最终会删除<sarcasm>
和<rant>
标记之类的内容。用户的意图不是注入HTML。
“Linux命令”与HTML无关。无法通过HTML /脚本注入执行任意Linux命令。
我想到的是诸如“; ls -la”
之类的东西
如果你实际上正在接受用户提供的输入并通过system
或者那种方式执行它,那么你已经遇到了麻烦。这是一个可怕的想法,你不应该这样做。
&LT; /咆哮&GT;
答案 1 :(得分:4)
您必须始终为作业选择合适的工具。据说$re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8");
永远不应该用于任何事情。该命令是多余的,这意味着你不明白它在做什么。它不能很好地防止xss因为xss is an output problem。
要清理shell参数,您必须使用escpaeshellarg()。对于XSS,您应该使用:
htmlspecialchars($_GET['re'], ENT_QUOTES, "UTF-8");
。但是,这并不会阻止所有XSS,也不会阻止SQL注入。
对sql使用参数化查询。
所有这些只是划伤表面阅读OWASP top 10。
答案 2 :(得分:-1)
这是我在将其插入数据库之前过滤输入的方式
<?php
function sanitize($data){
$result = trim($data);
$result = htmlspecialchars($data);
$result = mysql_real_escape_string($data);
return $result;
}
?>