项目开发安全经验总结

1、 安全思维

  • A)严格控制权限,最小业务授权;
  • B)记录详细日志,快速完整识别追查问题发生的位置;
  • C)定时备份(完整备份、每日增量备份),增加业务恢复可能;
  • D)数据通信加密(HTTPS+高级别SSL证书),数据保存加密(RSA 4096bits);
  • E)定时检测(特别是晚上10点到凌晨6点),关注异常行为。

2、 Linux/Windows服务器安全

a) 系统安全

  • i. 使用稳定高版本的成熟系统
  • ii. 定时升级软件,打补丁

b) 权限控制

  • i. 限制端口开放
  • ii. 限制ip访问(最好禁用IPv6,研究比较少)
  • iii. 限制各类应用,分别给予专用 用户名/用户组
  • Php: www用户 www用户组
  • Mysql: mysql用户 mysql用户组
  • ftp: ftp用户 ftp用户组
  • iv. 限制目录权限
  • 限制正常目录/文件的权限,修改为root:root 755权限
  • 限制上传目录的权限,修改为www:www 700权限
  • 限制上传的文件权限,修改为644权限

c) 定时检测

本项内容需要编写bash、sh脚本,配置计划任务来实现。

  • i. 监测系统用户,发现新增用户,异常权限用户马上报警
  • ii. 监测文件写入,特别是可执行文件,脚本的写入
  • iii. 监测并记录异常时间段的正常访问:ssh / mysql等

d) 记录操作日志,定时保护日志

通过定时转移项目日志,修改日志权限来保护日志。

3、 Nginx/Apache安全

  • A)调整日志格式,记录更详细信息:多种用户IP,post数据等
  • B)采用HTTPS通信,使用高级别的SSL证书
  • C)Set-Cookie:HttpOnly、Secure / X-Frame-Options SAMEORIGIN
  • D)根据业务过滤常见的GET类型攻击
  • E)严格控制上传的文件,并限制上传目录执行web脚本文件。

4、 Mysql 数据库安全

  • A)Root用户限制远程登录。必须使用远程超级用户的,一定要限制IP
  • B)每个应用专用一个账号,指定访问IP,限制权限范围。上线运行时,只给Select_priv、Insert_prive、Update_priv、Delete_priv权限。更特殊的可根据数据表,甚至数据字段来授权。
  • C)开启binlog日志

5、 Php web运行环境安全

  • A)使用disable_functions限制风险函数的执行,在不影响业务下可开启安全模式。
  • B)expose_php off 防止暴露源码
  • C)记录错误日志
  • D)合理配置线程工作模式与子进程数量,防止程序崩溃。

6、 程序安全

a) 页面限制

  • i. 限制页面的访问
  • ii. 限制页面的访问次数/频率

b) 参数限制

  • i. 限制参数数量,制作页面参数白名单
  • ii. 限制参数类型,过滤参数内容
  • iii. 限制参数输出,防止XSS攻击,防止关键参数泄露

c) 行为限制

  • i. 验证数据提交防止被篡改,一次一码 md5(uniqid())
  • ii. 限制验证码类使用次数
  • iii. 限制密码类错误尝试次数

d) 安全监控

  • i. 监控超级用户/管理员的权限异常
  • ii. 监控并记录超级用户/管理员的操作行为
  • iii. 监控核心变量的异常

e) Mysql数据接口

  • i. 生产环境,禁止异常sql命令,特别是 权限修改 跟into file这类sql命令;
  • ii. 规范Sql命令,保障参数安全。

f) 风险控制机制

  • i. 程序源代码加密,减缓代码暴露核心参数;
  • ii. 核心数据采用加密存储(RSA 4096bits),保护核心数据直接暴露;
  • iii. 如采用api接口通信的,最好对数据加密后再传输(HTTPS也是可以被钓鱼的)。

7、 Memcache 、 Redis等缓存服务器

  • a) 限制使用IP,仅限本机使用;
  • b) 严禁缓存核心数据,防止关键参数泄露。

8、写在最后

以上都是本人历年经验总结,写的不多,更谈不上详细,更多细节需要读者自己补充完善,算是抛转引玉吧。
欢迎拍砖。

猜你喜欢

转载自blog.csdn.net/CaThi/article/details/86656902