safety-specifications

接入微信城市服务,业务方需确保功能安全性。

常见安全检查表

XSS

  1. 输入校验:长度限制、值类型是否正确、是否包含特殊字符(如<>’”等)

  2. 输出编码:根据输出的位置进行相应的编码,如HTML编码、JavaScript编码、URL编码。

  3. 输出到HTML标签之间时,对这些数据进行HTML Entity编码

  4. 输出到HTML属性里时,特殊字符编码为&#xHH

  5. 输出到SCRIPT里时,对这些数据进行SCRIPT编码,除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为\xHH

  6. 输出到Style属性里时,对这些数据进行CSS编码,除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为\HH

  7. 输出到HTML URL里时,对这些数据进行URL编码,当需要往HTML页面中的URL里插入不可信数据的时候,需要对其进行URL编码

SQL注入

  1. 最佳方式就是使用预编译语句,绑定变量

  2. 检查数据类型

  3. 使用安全函数,例如php的mysql_real_escape_string

  4. 从数据库自身来说,应使用最小权限原则,切记不要使用dba权限

上传漏洞

  1. 在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查,尤其是服务端检测不能少

  2. 服务器端的检查最好使用白名单过滤的方法,比如只允许jpg文件上传等

  3. 上传目标路径尽量不在web目录下,如果在web目录下去掉该目录的可执行权限

  4. 慎用Fckeditorewebeditor等第三方上传组件,历史上曾出现多个漏洞

Struts2

历史上Struts2框架出过多个高危漏洞,这些漏洞足以黑掉一个网站,要尽量使用最新版本

信息泄漏

  1. 线上机器删掉测试页面,例如test.htmlphpinfo.php

  2. 禁掉详细的错误提示

  3. 禁止显示调试信息

  4. 禁止将svn相关的文件更新到线上机器,例如.svn/entries

登录安全

  1. 登录页面最好加入验证码

  2. 尽量使用https协议

会话安全

公众号开发中通常将openid作为用户身份标识,使用openid时要将openid设置到cookie中不要拼接到URL中例如http://www.qq.com/getuser?code=aaaaaa

管理页面

Tomcatjbossweblogic等管理页面可以做以下加个方面的安全策略

使用白名单的方式限制可以登录的IP

如果不使用这些管理界面直接删掉

平行权限问题

像订单等场景需要格外注意平行权限问题,例如order?Id=111,是否order?Id=112就可以看到其他的订单。对于这种情况的防御,可以加入校验参数,order?Id=111&sign=hash(字符串常量+id)

支付金额问题

  1. 涉及到微支付的web应用一定要严格按照微信支付官方网站的文档设计
  2. 确定用户的支付金额与应付金额是否相等