Python编码规范修炼与代码安全
在编写符合规范的代码以提高可阅读性时,注意代码的安全问题也不能忽视。
互联网企业的核心就是产品,如果对软件产品安全不够重视,受到的经济损失将是无法估计的,有可能影响着企业的生死存亡。
当相关开发者心中没有安全的相关概念、项目的开发,上线及迭代更新没有相应的规范等等,这些问题都将会是导致出现安全问题
理论上来讲对于安全,无论企业规模大小,无论企业产品的重要程度如何,注重软件安全是非常有必要的。
- 通用安全开发规范
- python安全编码规范
- web编程安全规范
一,通用安全开发规范
输入验证
- 对所有输入的信息和内容都需要做必要验证,包括数据类型,长度和范围等
- 禁止向exec()/eval()方法传递不可信、未净化的数据(当参数中包含空格,双引号,以-或者/符号开头表示一个参数开关时,可能会导致参数注入漏洞)
- 必要时可以考虑在python中禁用exec或eval方法
输出编码
- 必要时对所有输出字符进行编码
- 特别包括SQL,XML,HTML,JavaScript等内容
- 对于操作系统命令,净化所有不可信数据输出
异常处理
- 禁止在异常中泄露敏感信息(错误信息,路径,IP,版本,架构等)
- 发生异常时要恢复到之前的对象状态(业务操作失败时,进行回滚业务;或者避免去修改对象状态,维持对象状态一致性)
身份验证
- 除了那些特定设为“公开”的内容以外,对所有的网页和资源都要求进行身份验证,并正确设计身份验证功能
- 所有的身份验证过程必须在服务器后端上执行
- 所有的身份验证控制应当安全的处理未成功的身份验证,比如给出错误模糊提示,隐藏敏感信息
- 登录入口应具有防止暴力猜解及撞库猜解(利用已泄漏的密码字典进行批量登录尝试)的措施,超过设定失败次数需要启用锁定或图片随机码进行访问限制
- 在执行关键操作(如个人信息密码修改操作)时,应对用户身份进行再次验证
- 为高度敏感或重要的交易账户使用多因子身份验证机制,如支付密码、短信验证码等
短信验证码
- 发送频率控制(建议60s获取一次