1. SQL注入
- 楼主认为,就是数据库名、表名、字段名被恶意获取,并且被恶意替换系统安全性较低的SQL注入语句。
- 预防措施:
1
2
3
41. 使用预编译的SQL语句
比如:使用prepareStatement(XXX=?).setXXX(),这样SQL的语义不会发生变化,攻击者也无法改变SQL结构
2. 参数化查询
就是SQL中的变量通过参数传入,而不是以字符串拼接的方式传入,但是不要使用“$name”的形式,要使用“:name”的形式2. 失效的身份认证和会话管理
- 楼主认为,就是cookie里面的保存的一些网站数据被一些恶意网站窃取。
chooie maxAge属性:maxAge为正数,浏览器会将maxAge为正数的cookie写到本地,只要maxAge>0,这个cookie就还能被使用;maxAge为负数,该cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭该窗口后该cookie失效;maxAge为0,删除该cookie;maxAge默认值为-1。
- 预防措施
1
2
3
4
51. 尽可能使maxAge为负数
2. maxAge>0时,合理制定cookie的存活周期
3. maxAge>0时,尽可能的为其添加httponly属性
4. 不往cookie中添加敏感信息
5. 如果使用https,标记为securecookie设置httponly后只有服务器才有修改读取cookie的权限,cookie设置secure后只有https才会传递该cookie。
3. 跨站脚本(XSS)
- 楼主认为,XSS漏洞就是访客可以通过正常途径往服务器的Web上注入恶意代码,比如一些评论是可以直接追加到网页上的。
- 预防措施
- 配置过滤组件。
- 如果是JSP/Servlet,在生成网页的时候对不信任的输入进行检查。
4. 不安全的直接对象引用
- 楼主认为就是使用get方法传参时,恶意用户对URL参数进行修改,比如说:XXXX?acount=123456,恶意用户可以简便的更改URL上面的参数,可能会造成越权访问,或者恶意注入一些参数
- 预防措施
1
21. 避免在URL或网页中直接引用内部文件名或数据库关键字等
2. 处理一些敏感的get请求时,添加身份验证5. 安全配置错误
- http可以开启put、delete、trace三个方法
put:向webServer上传资源 delete:通过http请求删除指定URL上的资源 trace:可以获取网站前端缓存服务器、进行XSS攻击、在启用httponly的情况下绕过限制读取cookie
- 预防措施
1
在web.xml中加入<security-constraint>认证
6. 敏感信息泄露
- tomcat等应用服务器默认的exception页面泄露应用服务器版本信息,这样攻击者就可以根据版本漏洞进行攻击
- 内部IP地址泄露,比如说JS代码中含有某个服务器的内网IP
- 预防措施
1
21. 关闭应用服务器的默认exception页面,建立自定义的exception页面
2. 使用服务器名称代替服务器内部IP7. 功能级访问控制缺失
- 楼主认为,对于一些默认的功能页面的访问不加权限控制,导致的恶意攻击行为,默认的功能型页面如tomcat的XXX:8080/docs/等帮助文档。
1
2
31. 对功能性页面的访问加权限控制
2. 不使用默认的端口号、路径
3. 不使用默认的账号、密码8. 跨站请求伪造(CSRF)
- 楼主认为,当你登录一个正常的网站A,在没有登出A的情况下,访问恶意网站B,B利用浏览器中的A的权限进行攻击,就是CSRF。
- 预防措施
1
21. 在请求中放入攻击者不能伪造的信息token,并进行token校验
2. Spring过滤器9. 使用含有已知漏洞的组件
- 比如DedeCMS、SiteServer CMS、ThinkSNS、ThinkPHP
10. 未验证的重定向和转发
- 曾经有个漏洞 XXXX?url=evil.com,往恶意网站泄露了用户信息
- 预防措施
1
21. 使用重定向和转发的时候,不要传递用户信息
2. 使用ESAPI重写sendRedirect,往里面添加目的地校验等