更新时间:2023-12-26 GMT+08:00
分享

安全编码

本章节介绍编码的安全要求。

输入校验

不能依赖客户端校验,必须使用服务端代码对输入数据进行最终校验。对于在客户端已经做了输入校验,在服务器端再次以相同的规则进行校验时,一旦数据不合法,必须使会话失效,并记录告警日志。

必须假定所有用户产生的输入都是不可信的,并对它们进行合法性校验和值域校验,一旦数据不合法,应该告知用户输入非法并建议用户纠正输入。

  • 如果输入为数字参数,必须进行数字型判断。
  • 如果输入只允许包含某些特定的字符或字符的组合,使用白名单(推荐使用正则表达式)进行输入校验。
  • 如果输入为字符串参数,必须进行字符型合法性判断。
  • 如果明确输入数据的长度限制,必须校验输入数据的长度。
  • 如果输入数据为数值且明确范围,必须检验数据的范围。
  • 禁止通过字符串串联,直接使用用户输入构造可执行SQL语句,降低SQL注入攻击的风险。
  • 用于重定向的输入参数不能包含回车和换行字符,以防止HTTP响应拆分攻击。

    “回车”字符有多种表示方式(CR = %0d = \r ),“换行”字符有多种表示方式(LF = %0a= \n)。

上传下载

  • 必须在服务器端采用白名单方式,对上传或下载的文件类型、大小进行严格的限制。
  • 禁止以用户提交的数据,作为读、写、上传、下载文件的路径或文件名,以防止目录跨越和不安全直接对象引用攻击。
  • 禁止将敏感文件(如日志文件、配置文件、数据库文件等),存放在Web内容目录下。

    Web内容目录指的是:通过Web可以直接浏览、访问的目录,存放在Web内容目录下的文件容易被攻击者直接下载。

会话及权限管理

对于每一个授权访问的接口内,都必须核实用户的会话标识是否合法、用户是否被授权执行这个操作。授权和用户角色数据必须存放在服务器端,不能存放在客户端,鉴权处理也必须在服务器端完成。

敏感数据保护

敏感数据包括但不限于口令、密钥、证书、会话标识、License、隐私数据(如短消息的内容)、授权凭据和个人数据(如姓名、住址、电话等)等。在程序文件、配置文件、日志文件、备份文件及数据库中,都有可能包含敏感数据。

  • 禁止在代码和日志中,存储敏感数据。
  • 禁止密钥或账号的口令,以明文形式存储在数据库或文件中。
  • 禁止使用自己开发的加密算法,必须使用公开、安全的标准加密算法。
分享:

    相关文档

    相关产品