由于 XSS 如何恶意的答案已经给出,我只回答以下未回答的问题:
如何防止 XSS 在我的网站上发生?
为了防止XSS,需要进行HTML转义any 用户控制当它们即将重新显示在页面上时输入。这包括请求标头、请求参数以及将从数据库提供的任何存储的用户控制输入。尤其是<
, >
, "
and '
需要转义,因为它可能会使重新显示此输入的周围 HTML 代码变形。
几乎所有视图技术都提供了转义 HTML(或 XML,这也足够了)的内置方法entities http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references.
在 PHP 中你可以这样做htmlspecialchars() http://php.net/manual/en/function.htmlspecialchars.php. E.g.
<input name="foo" value="<?php echo htmlspecialchars($foo); ?>">
如果您还需要使用此转义单引号,则需要提供ENT_QUOTES
参数,另请参阅前面链接的 PHP 文档。
在 JSP 中,您可以使用 JSTL 来做到这一点<c:out> http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/out.html or fn:escapeXml() http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fn/escapeXml.fn.html. E.g.
<input name="foo" value="<c:out value="${param.foo}" />">
or
<input name="foo" value="${fn:escapeXml(param.foo)}">
请注意,实际上您不需要在请求处理期间转义 XSS,而只需要在响应处理期间转义。请求处理期间不需要转义,并且它may迟早会导致用户输入错误(作为网站管理员,您也想知道what相关用户实际上已经进入,以便您可以在必要时采取社交行动)。对于SQL注入,只需要在请求处理过程中,当数据即将持久化到数据库时进行逃逸即可。