安全意识

安全意识是程序员最重要的基本功。写代码时,永远要假设所有用户输入都是恶意的
攻击入口主要集中在:表单提交、文件上传、URL参数、第三方解析引擎等位置。

1、文件上传漏洞风险

攻击者上传动态脚本文件,例如 aspxphpasp 等服务端可执行页面。
之后直接访问上传后的脚本地址,代码会在服务器上运行
危害:篡改网站首页、植入广告、删除服务器文件、获取服务器权限。

开发要点:文件上传模块必须做校验,限制文件类型,禁止上传服务端脚本。

2、表单与输入点

表单提交处不可信任用户输入:

  • 需要过滤危险HTML、JS脚本,防范XSS跨站脚本;
  • SQL操作使用参数化查询,杜绝SQL注入;
  • 第三方页面解析引擎,如果支持直接执行SQL,风险极高。
    例如用户传入 select username,直接查询拿到全部账号数据。

3、错误提示信息模糊处理

不好示例:

  • “账号不存在”
  • “密码错误”

推荐模糊提示:

“账号或者密码或者验证码输入不对”

如果分开提示,黑客可以暴力枚举,先探测哪些账号是系统真实存在的,再爆破密码。模糊错误提示增加攻击者猜测难度。

4、登录防护

  1. 增加输入错误锁定功能,密码多次输错后进行账号锁定,防止暴力破解;
  2. 修改后台管理默认登录地址,不要使用通用路径(如 /admin),减少被扫描器探测到的概率。

5、URL参数校验

对URL传递的参数做校验过滤,不能直接拿来拼接SQL、直接输出页面,防止传入恶意参数发起攻击。

总结

安全不是靠某一个单独功能,而是融入每一行代码。
所有来自浏览器的数据(表单、上传文件、url参数、cookie)全部都不可信,都要做校验、过滤、处理。

前面学习的SQL注入、XSS、CSRF、文件上传,根源大多都是程序员缺少安全意识,直接信任用户输入。

Previous:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注