OWASP Top 10

1. SQL注入

  • 楼主认为,就是数据库名、表名、字段名被恶意获取,并且被恶意替换系统安全性较低的SQL注入语句。
  • 预防措施:
    1
    2
    3
    4
    1. 使用预编译的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
    5
    1. 尽可能使maxAge为负数
    2. maxAge>0时,合理制定cookie的存活周期
    3. maxAge>0时,尽可能的为其添加httponly属性
    4. 不往cookie中添加敏感信息
    5. 如果使用https,标记为secure

    cookie设置httponly后只有服务器才有修改读取cookie的权限,cookie设置secure后只有https才会传递该cookie。

    3. 跨站脚本(XSS)

  • 楼主认为,XSS漏洞就是访客可以通过正常途径往服务器的Web上注入恶意代码,比如一些评论是可以直接追加到网页上的。
  • 预防措施
    1. 配置过滤组件。
    2. 如果是JSP/Servlet,在生成网页的时候对不信任的输入进行检查。

    4. 不安全的直接对象引用

  • 楼主认为就是使用get方法传参时,恶意用户对URL参数进行修改,比如说:XXXX?acount=123456,恶意用户可以简便的更改URL上面的参数,可能会造成越权访问,或者恶意注入一些参数
  • 预防措施
    1
    2
    1. 避免在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
    2
    1. 关闭应用服务器的默认exception页面,建立自定义的exception页面
    2. 使用服务器名称代替服务器内部IP

    7. 功能级访问控制缺失

  • 楼主认为,对于一些默认的功能页面的访问不加权限控制,导致的恶意攻击行为,默认的功能型页面如tomcat的XXX:8080/docs/等帮助文档。
    1
    2
    3
    1. 对功能性页面的访问加权限控制
    2. 不使用默认的端口号、路径
    3. 不使用默认的账号、密码

    8. 跨站请求伪造(CSRF)

  • 楼主认为,当你登录一个正常的网站A,在没有登出A的情况下,访问恶意网站B,B利用浏览器中的A的权限进行攻击,就是CSRF。
  • 预防措施
    1
    2
    1. 在请求中放入攻击者不能伪造的信息token,并进行token校验
    2. Spring过滤器

    9. 使用含有已知漏洞的组件

  • 比如DedeCMS、SiteServer CMS、ThinkSNS、ThinkPHP

    10. 未验证的重定向和转发

  • 曾经有个漏洞 XXXX?url=evil.com,往恶意网站泄露了用户信息
  • 预防措施
    1
    2
    1. 使用重定向和转发的时候,不要传递用户信息
    2. 使用ESAPI重写sendRedirect,往里面添加目的地校验等
|