我想在我的spring应用程序中阻止xss攻击。
我添加了
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
进入我的web.xml(我发现了这个soulution here)
但是在我的页面上,我保存了名为<script>alert(1);</script>
的内容,并且这些脚本在页面刷新后执行。
客户端代码:
$.ajax({
type: 'POST',
url: 'setContentName',
dataType: 'json',
data: {contentId: id, name: params.value}
});
我错了什么?
我在刷新后使用javascript加载内容
答案 0 :(得分:2)
我的观点有点争议,但我认为你应该验证并拒绝入站XSS。你也应该在输出上转义它,但它不应该在你的数据库中,因为dbs是持久的并且通常是交叉应用。
请参阅https://www.owasp.org/index.php/OWASP_JSON_Sanitizer
使用Hibernate Validator(您不需要使用Hibernate ORM)和JSoup来避免数据库中的XSS:
Foo.java
:
@Entity
class Foo {
@SafeHtml(whitelistType = SafeHtml.WhiteListType.NONE)
private String name;
...
}
FooController.java
:
@Controller
public class FooController {
@RequestMapping(method=POST)
String submit(@Validated Foo foo) {
...
}
}
pom.xml
:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.1</version>
</dependency>
有关更多反XSS措施,请参阅Adding additonal Security to Website
答案 1 :(得分:-1)
我将JSTL用于此目的。在jsp页面中包含c前缀
{% javascripts 'public/js/app.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}
对于您要显示的值
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
在此方案中,设置属性<c:out value=${someVar} escapeXml="true" />
是可选的,因为其默认值为true