常规的web攻击手段,如XSS CRSF SQL注入,
XSS(跨站脚本攻击)(Cross Site Scripting)
攻击者在网页中嵌入恶意脚本程序
原因:用户输入的数据变成了代码,web页面中插入一些恶意的script代码,当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的
防范:将输入的数据进行转义处理,需要转义掉输入的尖括号
反射性xss :恶意链接 (窃取用户浏览器上的信息)
1 攻击者在url后面的参数中加入恶意攻击代码
2 当用户打开带有恶意代码的URL时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器
3 用户浏览器接收到相应后执行解析,其中的恶意代码也会被执行到。
4 攻击者通过恶意代码来窃取到用户数据并发送到攻击者网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户的行为,调用目标网站接口执行攻击等操作。
常见的XSS攻击: 恶意链接
(cookie是明文的,服务端可以设置httpOnly,使得前端无法操作cookie,如果没有这样的设置,xss(跨站脚本攻击)攻击就可以去获取到cookie;设置secure,则保证在https的加密通信中传输以防截获)
存储型xss (存储在服务器上,每次访问都会执行)
主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含恶意代码的页面就会执行恶意代码
原理:主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含恶意代码的页面就会执行恶意代码。
存储型XSS的攻击步骤如下:
1 攻击者将恶意代码提交到目标网站数据库中
2 用户代开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html返回给浏览器中
3 用户浏览器代码执行后,就会获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该cookie染回会冒充该用户的行为,调用目标网站接口等违法操作
防范:
1 后端对提交的数据进行过滤
2 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等
dom-based型xss(依靠innerHTML等将恶意脚本注射到用户的浏览器上)
客户端的js可以对页面dom节点进行动态的操作,比如插入、修改页面的内容。比如说客户端从URL中提取数据并且咋本地执行、如果用户在客户端输入的数据包含了恶意的js脚本的话,这些脚本没有做特殊的处理,那么我们的应用程序就有可能收到DOM-based XSS攻击。
DOM XSS 是基于文档对象模型的XSS,一般由如下DOM操作:
1 使用document.write直接输出数据
2 使用innerHTML直接输出数据
3 使用location location.href location.replace iframe.src document.referer windwo.name等这些
主要是由本地客户端获取的DOM数据在本地执行导致的。因此我们需要对HTML进行编码,对js进行编码来防止这些问题产生。
使用location/location.href/location.replace/iframe.src造成xss
参考连接:https://www.cnblogs.com/tugenhua0707/p/10909284.html
CSRF(跨站请求伪造)(cross site request forgery)
指通过伪装成受信任用户的进行访问,通俗的讲就是我访问了A网站,然后cookie存储在浏览器,然后我访问了一个流氓网站,点击了流氓网站的一个链接(向A发送请求),这个时候流氓网站利用了我的身份对A进行访问
被攻击的原因
用户本地存储cookie,攻击者利用用户的cookie进行认证,然后伪造用户发送请求
预防:之所以被攻击时因为攻击者利用了存储的浏览器用于用户认证的cookie,那么如果我们不用cookie来验证不就可以预防了,所以我们可以采用token(不存储于浏览器)认证;
通过referer识别,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
cookie安全策略
在服务器端设置cookie的时候设置http-only,这样就可以方防止用户通过JS获取cookie。对cookie的读写或发送一般由如字段进行设置:
http-only:只允许http或https请求读取cookie、js代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉),发送请求的时候自动发送cookie。
sucure-only:只允许https请求读取,发送请求时自动发送cookie
host-only:只允许主机域名与domain设置完成一致的网站才能访问该cookie
cookie默认是不能跨域的,为什么会有CSRF攻击?
用户在a网站登录且生成了授权的cookies,然后访问b网站,b站故意构造请求a站的
请求,用script img或者iframe之类的加载a站这个地址,浏览器会附带上a站此登录用户的授权cookie信息,这样就构成了csrf
注释:script、image、iframe的src都不受同源策略的影响。所以我们可以借助这一特点,实现跨域
SQL注入
通过SQL命令伪装成正常的http请求参数,传递到服务器端,服务器执行sql命令造成对数据库进行攻击
原因:
sql语句伪造参数,然后在对参数进行拼接后形成破坏性的sql语句,最后导致数据库受到攻击
预防:
在java中,我们可以使用预编译语言,这样的话即使我们使用sql语句伪造参数,到了服务器的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。
很多orm框架已经可以对参数进行转义
数据库中的密码不应明文存储,可以对密码使用md5进行加密
DDOS(分布式拒绝服务攻击)(Distributed Denial Service)
简单说就是发送大量请求使服务器瘫痪。DDos攻击是在DOS攻击基础上的,可以通俗理解,dos是单挑,而ddos是群殴,攻击者借助公共网络,将大数量的计算设备联合起来,向一个或多个目标进行攻击。
案例
SYN Flood,简单说一下tcp三次握手,客户端先服务器发出请求,请求建立连接,然后服务器返回一个报文,表明请求已被接收,然后客户端也会返回一个报文,最后建立连接。那么如果有这么一种情况,攻击者伪造ip地址,发出报文给服务器请求连接,服务器收到了,根据tcp三次握手的规则,服务器回应一个报文,可以ip的伪造的,第二次握手错误,第三次握手自然也就不能顺利进行了,这个时候服务器将维护一个非常大的半连接等待列表,占用了大量的资源,最后服务器瘫痪。
CC攻击,在应用层http协议上发起攻击,模拟正常用户发送大量请求直到网站拒绝服务为止。
被攻击的原因
服务器带宽不足,不能抵挡攻击者的攻击流量
参考链接:https://www.cnblogs.com/-new/p/7135814.html