当前位置:  开发笔记 > 编程语言 > 正文

PHP:显示信息的最佳安全实践?

如何解决《PHP:显示信息的最佳安全实践?》经验,为你挑选了1个好方法。

在PHP中,我知道使用参数化查询是防止SQL注入的最佳方法.

但是,如何清理将用于其他目的的用户输入,例如:

显示回用户(潜在的跨站点脚本向量)

处理电子邮件或填写邮件正文

htmlentities()对非数据库使用进行清理是最好的方法吗?什么被认为是最佳做法?



1> rook..:

在PHP中,最好的xss过滤器是:

htmlspecialchars($_POST['param'],ENT_QUOTES);

您还需要编码引号的原因是因为您不需要<>来利用某些 xss.例如,这容易受到xss的影响:

print('link');

在这种情况下你不需要<>执行javascript,因为你可以使用onmouseover,这是一个示例攻击:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';

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";

修补:

$_GET[name]=str_replace(array("\r","\n"),$_GET[name]);
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有