web安全一直是很头疼的问题,由于请求链接,接口,参数是直接暴露在外的。很容易受到各种攻击。
常见的web攻击有:
- sql注入
- 跨站脚本漏洞(XSS)
- 跨站请求伪造(XSRF)
- 文件上传漏洞
1,关于sql注入
原理:通过web表单提交,输入域名页面请求的参数组合到查询的SQL命令中,最终达到欺骗服务器执行恶意的SQL命令。
最简单的万能密码的例子
比如网站要输入用户名和密码:admin和12345
在后台一般这样判断的:
select id from users where username='admin' and password='12345';
用于验证用户名密码是否正确
sql注入:如果在用户名填’ ’ or 1=1 – ,密码随便填
select id from users where username ' ' or 1=1 -- and password ='234'
这样就跳过了验证。1=1永远成立,而’-- '表示后面的sql语句被注释掉了。
常见场景和如何判断是否存在SQL注入:
常见于HTTP://www.xxx.xxx/index.asp?id=XX这种带参数的动态网页中,且访问了数据库。
以此为例:此在后台的执行语句为:
select * from 表名 where 字段= a
以下三步骤可以判断是否存在SQL注入
-
HTTP://www.xxx.xxx/index.asp?id=XX’ (在参数后面附加单引号)此时语句变成了
select * from 表名 where 字段= a'
如果执行失败,数据库返回异常就可能存在sql注入。
-
HTTP://www.xxx.xxx/index.asp?id=XX and 1=1 (在参数后面加上 and 1=1),此时语句变成了
select * from 表名 where 字段= a and 1=1
因为1=1永远为真,如果运行结果跟正常一样。存在sql漏洞。
-
HTTP://www.xxx.xxx/index.asp?id=XX and 1=2 在参数后面加上 and 1=2)此时语句变成了
select * from 表名 where 字段= a and 1=2
因为条件永远为假,如果执行失败。
如果是三个步全部都满足,说明一定存在SQL注入的漏洞。
网上注入的工具还是很多的,如批量注入的明小子、啊D注入工具、椰树、御剑等等以后可以多了解了解,这篇关于SQL注入暂时写到这,相信你也有一定的了解了。
2,XSS跨站脚本攻击
原理:利用网站对用户提交的数据没有转义处理或者过滤不充分的缺点,添加一些代码,嵌入到web页面去,使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料,进行恶意操作等。
XSS攻击分类
-
反射型XSS攻击
特点:攻击者注入的数据反映在相应中,每次攻击需要用户点击
如:
正常的发送消息http://www.test.com/message.php?send=Hello,World!
接收者会显示Hello,World!
当恶意写为http://www.test.com/message.php?send=<script>alert(‘警告!’)</script>!
接收者会弹出警告窗口
-
存储型XSS攻击
特点:xss攻击代码存储在网站数据库,每当用户打开的时候执行。持久型(存储型)xss比非持久型危害性更大。
如:
留言板表单中的表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>
正常的是用户提交留言信息,存储在数据库。其他用户访问留言,应用数据查询显示。
异常:攻击者在value填写【或者html其他标签(破坏样式。。。)、一段攻击型代码】;
数据存储在数据库中,当其他用户访问,会执行这些恶意代码。
-
DOMBasedXSS(基于dom的跨站点脚本攻击)
特点:基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。
3,跨站请求伪造(XSRF)
原理:攻击者(黑客,钓鱼网站)盗用你的身份,以你的名义发送恶意的请求,包括发送邮件,发送消息,盗用账号等。从而使你的隐私泄露或者财产损失。
从上图可以看出,要完成XSRF攻击。必须走以下两步骤:
- 登录受信用的网站a,并在本地生成cookie.
- 在不登出a的情况下(会话生效),访问危险网站。
防御手段:
- 验证HTTP Referer字段
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的(https:/xxxxx/MOA/index.php)
如果是来自于危险网站,在后台添加拦截器进行处理即可。但是一些低级的浏览器可以通过某种方式篡改Referer值。这样不能完全拦截。 - 添加token验证
XSRF攻击之所以能成功,是因为伪造了客户请求,利用客户生效的cookie会话进行请求操作。如果每次验证请求身份就能防御
- 用户访问某个表单页面。
- 服务端生成token,放在用户session或者cookie中
- 在页面表单带上token参数。
- 用户提交表单,服务端验证提交表单中的token是否跟服务端生成的合法一致。否则为非合法请求。