客户端漏洞
漏洞 | 原因 | 解决方法 |
---|---|---|
XSS | 通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器 | 输出编码:如果是输出到事件或者脚本,则要再做一次javascriptEncode;如果是输出到HTML内容或者属性,则要做一次HtmlEncode。 |
CSRF | 攻击者通过技术手段欺骗用户的浏览器访问浏览器曾认证过的网站并运行特定操作,本质原因是重要操作的所有参数都是可以被攻击者猜测到的。 | 在cookie中添加一个无法预测的token值。 |
点击劫持 | 攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面 | HTTP头:X-Frame-Options设置浏览器允许跳转策略。 |
服务器端漏洞
漏洞 | 原因 | 解决方法 |
---|---|---|
SQL注入 | 把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。 | 防御SQL注入的最佳方式,就是使用预编译语句,绑定变量。 |
XML注入 | 同上 | 用户输入数据中包含的“语言本身的保留字符”进行转义 |
代码注入 | 代码注入与命令注入往往都是由一些不安全的函数或者方法引起的,其中的典型代表就是eval()。 | 禁用eval()、system()等可以执行命令的函数。如果一定要使用这些函数,则需要对用户的输入数据进行处理。 |
CRLF注入 | CR是Carriage Return (ASCII 13, \r), LF是Line Feed(ASCII 10,\n)。\r\n表示换行,CRLF常被用做不同语义之间的分隔符。因此通过“注入CRLF字符”,就有可能改变原有的语义。 | 处理好“\r”、“\n”这两个保留字符 |
文件上传 | 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。 | 1.文件上传的目录设置为不可执行;2.白名单文件类型判断(MIME Type、后缀检查);3.随机数改写文件名和文件路径;4.单独设置文件服务器的域名。 |
认证安全 | 认证错误导致安全直接失效;认证实际上就是一个验证凭证的过程。 | 1.密码强度要求;2.密码散列算法加密存储;3.多因素认证;4.session随机化;5.强制session过期;6.单点登录、OpenID。 |
权限控制 | 某个主体(subject)对某个客体(object)需要实施某种操作(operation),而系统对这种操作的限制就是权限控制。 | 1.基于角色的访问控制RBAC、最小权限原则、默认拒绝策略;2.基于数据的访问控制;3.Oauth实现站点间授权; |
DDoS | 利用“合理”的请求造成资源过载,导致服务不可用。 | 1.限制频率;2.JS验证;3.验证码。 |