Appearance
安全
◆ R1: 禁止未过滤的变量拼接 SQL,请使用变量绑定替代。 ORDER BY
的字段、以及分页参数 $start
、$limit
也需要过滤。防止 SQL 注入攻击。
注意
SQL 注入会导致数据库被拖库、数据被破坏、信息泄露等严重的安全问题,属于 Web 开发安全中,破坏性最大的安全问题。
继承自GeneralDaoImpl
的 Dao,可以通过 sql($sql, $orderBys=null, $start=null, $limit=null)
来组装 OrderBy 以及分页参数。例:
php
$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 头部的安全配置。
参见:
◆ R10: 依赖第三方组件安全。
对于依赖的第三方组件库,需加入持续集成做安全检查,每日至少检查一次。
◆ R11: 系统的默认配置,应该是安全的、无风险的。
◆ R12: 登陆管理后台,应需再次鉴权,并设置登陆后台的 Session 较短的有效期。
◆ R13: 隐私数据,需要加密存储。
身份证图片、身份证号码等用户隐私数据应加密存储,以降低网站受攻击时隐私数据被泄露的可能性。