1.XSS(跨站脚本攻击)
XSS有三种:
1.反射型XSS:
将恶意脚本代码注入到请求中,生成恶意链接,诱使用户点击以达到攻击目的
2.存储型XSS:
攻击代码存储在服务器端,常见的就是攻击者写下一篇具有恶意代码的博客,凡是浏览这篇博客的用户都会在浏览器执行恶意代码。
3.DOM XSS:
通过innerHTML将输入作为html代码写入到页面,修改了dom节点
防御XSS:
1.过滤输入:使用白名单过滤特殊字符
2.HTTPonly:本质上是防止XSS带来的cookie盗窃问题,并未解决XSS
3.输出检查:将变量输出到html时使用编码或者转义的方法
4.处理富文本时,使用白名单禁止危险标签
2.跨站请求伪造(CSRF)
攻击者诱使用户点击指定的页面,用户点击之后看到一张无法显示的图片,而这张图片已经被构造了一个请求,而这个对用户有害的请求的发送用户并不知情。
防御:
1.跨域加载资源时禁止本地cookie的发送。
2.验证码
3.检查refer头(但是有许多情况下用户并不会发送refer,这个不能作为防御CSRF的主要手段)
4.加token:
在url参数中新增一个随机值token,token为用户与服务器共同持有。
3.点击劫持
在用户不知情的情况下诱使用户点击一个按钮,而这个按钮上覆盖着一个看不见的iframe,达到执行恶意代码的目的。本质上是一种视觉欺骗。
防御:
1.禁止iframe的嵌套
2.使用X-Frame-Options头
4.SQL注入
SQL注入本质上是用户能够控制输入的数据,并且原本程序要执行的代码拼接了用户的输入。
注入攻击是应用违背了代码与数据分离的原则导致的结果。
防御:
1.使用预编译语句
2.使用安全的存储过程
3.检查输入的数据类型
4.使用安全函数将字符进行编码
5.使用最小权限原则,避免应用直接以root等高权限用户登录数据库
5.文件上传漏洞
指用户上传了一个可执行文件而获得了执行服务器端命令的权限。
比如:上传web脚本文件,服务器的web容器解释执行了脚本,导致代码执行,也就是所谓的webshell
要利用文件上传漏洞,需要以下条件:
1.上传的文件能够被web容器执行
2.用户能够从web上访问这个文件。
防御:
1.文件上传目录设置为不可执行
2.使用白名单的后缀检查判断文件类型
3.单独设置文件服务器的域名