我如何防止XSS(跨站点脚本)只使用HTML和PHP?
关于这个主题,我已经看到了许多其他的帖子,但是我还没有找到一篇文章能够清楚而简洁地说明如何实际防止XSS。
我如何防止XSS(跨站点脚本)只使用HTML和PHP?
关于这个主题,我已经看到了许多其他的帖子,但是我还没有找到一篇文章能够清楚而简洁地说明如何实际防止XSS。
当前回答
保护你的输入的最好方法是使用htmlentities函数。 例子:
htmlentities($target, ENT_QUOTES, 'UTF-8');
你可以在这里获得更多信息。
其他回答
按偏好顺序排列:
If you are using a templating engine (e.g. Twig, Smarty, Blade), check that it offers context-sensitive escaping. I know from experience that Twig does. {{ var|e('html_attr') }} If you want to allow HTML, use HTML Purifier. Even if you think you only accept Markdown or ReStructuredText, you still want to purify the HTML these markup languages output. Otherwise, use htmlentities($var, ENT_QUOTES | ENT_HTML5, $charset) and make sure the rest of your document uses the same character set as $charset. In most cases, 'UTF-8' is the desired character set.
另外,确保在输出上转义,而不是在输入上转义。
基本上,当您想要向浏览器输出来自用户输入的内容时,就需要使用htmlspecialchars()函数。
使用这个函数的正确方法是这样的:
echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
谷歌Code University也有这些非常有教育意义的Web安全视频:
如何打破网络软件-看看安全漏洞 网络软件 关于安全,每个工程师都需要知道什么 以及在哪里学习
最重要的步骤之一是在用户输入被处理和/或呈现回浏览器之前对其进行消毒。PHP有一些可以使用的“过滤器”函数。
XSS攻击的形式通常是向用户插入一些包含恶意意图的场外javascript的链接。点击这里阅读更多信息。
你还需要测试你的网站——我可以推荐Firefox插件[XSS Me]。看起来简单XSS是现在要走的路。
你也可以通过header(…)设置一些XSS相关的HTTP响应头
X-XSS-Protection”1;模式=块”
可以肯定的是,浏览器XSS保护模式是启用的。
Content-Security-Policy "default-src 'self';……”
启用浏览器端内容安全性。有关内容安全策略(CSP)的详细信息,请参阅:http://content-security-policy.com/ 特别是设置CSP来阻止内联脚本和外部脚本源有助于对抗XSS。
关于你的web应用程序安全性的一堆有用的HTTP响应头,请查看OWASP: https://www.owasp.org/index.php/List_of_useful_HTTP_headers
在PHP上使用htmlspecialchars。在HTML上尽量避免使用:
元素。innerHTML = "…"; 元素。outerHTML = "…"; document . write(…); document.writeln(…);
其中var由用户控制。
显然也要避免eval(var), 如果你必须使用它们中的任何一个,然后尝试JS转义它们,HTML转义它们,你可能需要做更多的事情,但对于基础知识,这应该足够了。