Web应用安全权威指南丨读书笔记

内容选自《Web应用安全权威指南》第4章,人民邮电出版社,[日]德丸浩著,赵文等译。

XSS

定义

通常情况下,在web应用的网页中,有些部分的显示内容会依据外界输入值而发生变化,而如果生成这些 HTML 的程序中存在问题,就会滋生名为跨站脚本的安全隐患。

风险

  • 用户的浏览器中运行攻击者的恶意脚本,从而导致 Cookie 信息被窃取,用户身份被冒名顶替;
  • 攻击者能获得用户的权限来恶意使用 web 应用的功能;
  • 响应用户显示伪造的输入表单,通过钓鱼式攻击窃取用户的个人信息。

防范策略

  • 输入校验。长度限制、值类型是否正确、是否包含特殊字符(如<>'”等)。其实校验是对数据无害的,满足就放行,不满足就阻止。这个过程一般不建议进行任何过滤操作,这样能保证数据的原生态。
  • 输出编码。页面显示时将 HTML 中含有特殊意义的字符(即,元字符)转义。根据输出的位置进行相应的编码,如 HTML 编码、JavaScript 编码、URL 编码。原则就是,该数据不要超出自己所在的区域,也不要被当作指令执行。

SQL 注入

定义

SQL 注入漏洞是由于 SQL 语句的调用方法不完善而产生的安全隐患。

风险

以下影响中攻击者都能够直接对服务器实施主动攻击,而不需要用户的参与。也就是说,SQL 注入漏洞是发生在服务器端的。

  • 数据库内的信息全部被外界窃取;
  • 数据库中的内容被篡改;
  • 登录认证被绕过(应用程序登录不需要用户名和密码);
  • 其他,例如服务器上的文件被读取或修改、服务器上的程序被执行等;
  • 根据数据库引擎的不同,通过 SQL 注入攻击还可以执行 OS 命令、读取文件、编辑文件、通过 HTTP 请求攻击其他服务器等。

防范策略

产生 SQL 注入漏洞的根本原因为,被指定为参数的字符串的一部分被排除出字面量,导致 SQL 语句发生了变化。因此,要防范 SQL 注入漏洞,就必须防止 SQL 语句在拼接过程中被更改。具体可采取如下两种方法:

  • 使用占位符拼接 SQL 语句(推荐);
  • 在应用程序中拼接 SQL 语句时,要确保字面量被正确处理,SQL 语句不被更改(实施非常困难)。

此外,还有一些辅助性对策:

  • 不显示详细的错误消息;
  • 校验输入值的有效性;
  • 设置数据库权限。

CSRF

定义

在执行关键处理前,需要确认该请求是否确实由用户自愿发起。如果忽略了这个确认步骤,就可能出现很大问题,比如用户只是浏览了恶意网站,浏览器就擅自执行关键处理等。引发上述问题的安全隐患被称为跨站请求漏洞,而针对 CSRF 漏洞进行的攻击就是 CSRF 攻击。

风险

Web 应用存在 CSRF 漏洞时就可能会遭受如下攻击:

  • 使用用户的账号购物;
  • 删除用户账号;
  • 使用用户的账号发布帖子;
  • 更改用户的密码或邮箱地址等。

CSRF 漏洞造成的影响仅限于应用的关键处理被恶意使用,而像用户的个人信息等就无法通过 CSRF 攻击窃取。

防范策略

为了预防 CSRF 漏洞,就需要在执行关键处理前确认请求确实是由用户自愿发起的。

筛选出需要防范 CSRF 攻击的页面

  • 在需求分析阶段制作功能一览表,标记出需要执行 CSRF 防范策略的功能;
  • 在概要设计阶段制作页面跳转图,标记出需要执行 CSRF 防范策略的页面;
  • 在开发阶段实施 CSRF 防范策略。

使代码有能力辨认是否是正规用户的自愿请求

  • 嵌入机密信息(令牌);
  • 再次输入密码;
  • 检验 Referer。


Leave a Reply

Your email address will not be published. Required fields are marked *