安全

◆ R1: 禁止未过滤的变量拼接 SQL,请使用变量绑定替代。 ORDER BY 的字段、以及分页参数 $start$limit 也需要过滤。防止 SQL 注入攻击。

注意

SQL 注入会导致数据库被拖库、数据被破坏、信息泄露等严重的安全问题,属于 Web 开发安全中,破坏性最大的安全问题。

继承自GeneralDaoImpl的 Dao,可以通过 sql($sql, $orderBys=null, $start=null, $limit=null)来组装 OrderBy 以及分页参数。例:

  1. $sql = $this->sql("SELECT * FROM user WHERE locked = ?", array('createdTime' => 'DESC'), $start, $limit);

◆ R2: TWIG中通过raw过滤输出的变量,必须经过HTML过滤,防止XSS攻击。

◆ R3: 所有表单提交,必须带有 CSRF Token ;所有资源更新、删除、创建的请求,必须通过 POST 提交。防止 CSRF攻击。

◆ R4: 所有重定向的跳转的 URL,都要经过白名单过滤。

如不做此过滤,存在会被攻击者利用,将网站用户带到钓鱼网站的风险。

◆ R5: 数据的访问权限需要做检查。

例1: 查看我的订单详情 /my/orders/{id},需要检查 {id} 对应的订单,是否为当前登陆用户的订单。

例2: 编辑课程题目 /courses/{courseId}/questions/{questionId}/edit,需要检查当前用户是否有编辑 {courseId} 对应的课程权限外,还需检查 {questionId} 对应的题目是否为当前课程的。

◆ R6: 对涉及用户的用户名、Email、手机号、验证码、密码的接口需要做调用限制,防止被暴力破解以及撞库。

相关接口有:登陆、手机验证码、第三方账号绑定、邮箱\手机号是否存在校验Ajax请求等。

◆ R7: 第三方接口回调通知,须校验数据是否被窜改,以及回调的来源。

◆ R8: 关键数据型 Cookie 要配置 HttpOnly。

配置 HttpOnly 后,JavaScript就无法读到此 Cookie。当网站被 XSS 攻击时,避免关键数据泄露。

◆ R9: Http 头部的安全配置。

参见:

对于依赖的第三方组件库,需加入持续集成做安全检查,每日至少检查一次。

◆ R11: 系统的默认配置,应该是安全的、无风险的。

◆ R12: 登陆管理后台,应需再次鉴权,并设置登陆后台的 Session 较短的有效期。

◆ R13: 隐私数据,需要加密存储。

身份证图片、身份证号码等用户隐私数据应加密存储,以降低网站受攻击时隐私数据被泄露的可能性。