1、XSS攻击(跨站点脚本攻击)
指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式
常见的XSS攻击类型有两种:
1、反射性 (url参数直接注入)
反射性:攻击者诱导用户点击一个恶意嵌入脚本的链接,达到攻击的目的
2、存储型(持久性)
存储型(持久性):攻击者提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意代码被读出来被包涵在正常网页中,达到攻击目的,这种危害比较大一些,因为太隐蔽
XSS攻击注入点:
HTML节点内容:如果节点的内容是动态生成的,里面包涵用户输入的信息,可能包涵脚本
HTML属性:如果属性是由用户输入的造成的,那么用户输入的数据有可能包含脚本
js代码:存在用户输入的信息
富文本:其实一大堆HTML,HTML由XSS攻击风险
消毒:(主要防御方法是转义)
对HTML代码中进行转移,转移< <和> >
如果出现在HTML属性中,使用了“关闭了我们了属性然后产生了新的属性,新的属性中出现脚本所以用“ &quto; 进行转义
富文本 可以按照黑名单过滤script或者按照白名单保留部分标签和属性,一般有根据白名单过滤HTML(防止XSS攻击)的组件
CSP:用于指定那些内容可以执行,那些不可以被这些,这样把用户输入标记为不可执行
为什么产生XSS攻击呢,主要是我们写入的程序,插入一些用户的数据,但是用户的数据被当做程序来执行的
PHP中防御XSS:
内置函数转移、DOM(domdocument)解析白名单(把字符串解析为DOM,然后做白名单)、第三方库、CSP
//转移符号 & < > ' " 默认情况下不转义" 所以
htmlspecialchars($content,ENT_QUOTES)
CSP: header("Content-Sevurity-Policy:script-src 'self'")
2、注入攻击
注入攻击主要有两种形式,SQL注入攻击和OS注入攻击。
SQL注入攻击:攻击者在HTTP请求中注入恶意SQL命令,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行 (1 or 1 =1) select * from table where id=1 or 1=1;
SQL注入攻击需要攻击者对数据库框架有所了解才能执行,攻击者获取数据库表结构信息的手段如下几种:1、开源的软件搭建网站 2、错误回显 3、盲注 根据网页变化情况判断SQL语句执行情况,这种攻击难度较大
消毒:
1、检查数据类型
1、 $id=intval($_GET['id']) //主要是数字
2、对数据进行转义
2、$title= mysqli_real_escape_string($_GET['title'])
3、使用参数化查询 (又数据库提供,来自于PDO,把查询语句分为两部分,发过去)
4、使用ORM(对象关系映射)
在框架里面有对ORM进行封装,底层还是使用PDO做封装的
3、CSRF攻击
CSRF:跨站请求伪造,其他网站对本网站产生的影响,以合法用户身份进行非法操作,如转账交易、发表评论。其核心是利用了浏览器Cookie或者服务器Session策略,盗取用户身份
CSRF防御手段主要识别请求者身份:
1、表单Token :CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以,表单Token通过在请求参数中添加随机数的办法阻止攻击者获取所有请求参数。在表单页面中添加一个随机Token,每次响应Token都不同,从正常提交的请求会包含Token,而伪造请求无法获取该值,服务器检查参数中Token指是否存在并且正确以确定请求提交者是否合法
2、验证码:请求提交的时候需要用户输入验证码,以避免用户不知情的情况下被攻击者伪造请求。
3、Referer check :HTTP请求头的Referer域中记录着请求来源,通过检查请求来源,验证是否合法。很多网站使用这个额功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的页面就拒绝)
4、其他攻击和漏洞
Error Code:错误回显,许多Web服务器默认打开异常信息输出的,这种方式虽然对程序调试和错误报告有好处,但是攻击者通过故意制造非法输入,使系统运行时出错获取异常,然后需要漏洞攻击。防御手段也很简单,通过配置Web服务器参数,挑战500页面到专门错误页面即可,Web应用常用MVC框架也有这个功能
HTML注释:为了调试长须或者其他不恰当原因,开发人员在PGP等服务器页面程序使用HTML注释语法,这些注释会显示在客户端浏览器,所以最终发布前需要代码review或者自动扫描,避免HTML注释漏洞
文件上传:如果上传的是可执行的程序,并通过改程序获取服务器命令执行能力,那么攻击者可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传白名单,只允许上传可靠的文件类型,此外还可以修改文件名,使用专门的存储等手段保护服务器面授上传文件攻击
路径遍历:攻击在请求的URL使用相对路径,遍历系统未开放的目录和文件。防御方法主要讲JS、CSS等资源文件部署在独立服务器上,使用独立域名,其他文件不适用静态URL访问,动态参数不包含文件路径信息
5、信息加密技术
信息加密技术可分为三类:单向散列加密、对称加密和非对称加密
1、单项散列加密
是指通过对不同输入长度信息进行散列计算,得到固定长度的输出,这些散列计算过程是单向的
利用单向散列加密这个特性,可以对密码进行加密保存,即用户注册时输入的密码不直接保存到数据库,而对密码进行单向散列加密,将密文存入数据库,用户登录时,进行密码验证,同样进行输入密码进行散列加密,并对比如果一致,则密码验证成功
虽然不能通过算法将散列密文反算得到明文,但是由于人们设置密码具有一定的模式,因此通过彩虹表手段进行猜测式破解
为了加强单向散列计算的安全性,还会给散列算法家点盐(salt),salt相当于加密的密码,增强破解难度
常用的单向散列算法 MD5、SHA。单向散列算法还有一个特点:就是输入的任何微小变化都会导致输入的完全不同,这个特性有时也会被用来生成信息摘要等用途