Nat*_*ong 7 php security sanitization user-input
在PHP中,我知道使用参数化查询是防止SQL注入的最佳方法.
但是,如何清理将用于其他目的的用户输入,例如:
htmlentities()对非数据库使用进行清理是最好的方法吗?什么被认为是最佳做法?
在PHP中,最好的xss过滤器是:
htmlspecialchars($_POST['param'],ENT_QUOTES);
Run Code Online (Sandbox Code Playgroud)
您还需要编码引号的原因是因为您不需要<>来利用某些 xss.例如,这容易受到xss的影响:
print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>');
Run Code Online (Sandbox Code Playgroud)
在这种情况下你不需要<>执行javascript,因为你可以使用onmouseover,这是一个示例攻击:
$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';
Run Code Online (Sandbox Code Playgroud)
ENT_QUOTES负责双引号.
电子邮件有点不同,javascript 不应该由邮件客户端执行,如果是,那么由于同源策略,您的站点不会受到影响.但为了安全起见,我仍然会使用htmlspecialchars($var,ENT_QUOTES);.但是,PHP的mail()函数可以屈服于不同类型的漏洞,称为CRLF注入.以下是针对PHP-Nuke的示例漏洞.如果您有这样的函数调用:mail($fmail, $subject, $message, $header);那么您必须确保用户无法注入\r\n$ header.
易受攻击的代码:
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
Run Code Online (Sandbox Code Playgroud)
修补:
$_GET[name]=str_replace(array("\r","\n"),$_GET[name]);
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |