【白帽子讲web安全】关于XSS,CSRF,SQL注入

1.XSS
分类:
     1.反射型:给用户发送页面或者链接,让用户点击来进行攻击
     2.存储型:把攻击存放在服务端,可能造成传播(比如博客系统,每个访问该页面的人都有可能被攻击),主动性更强
     3.DOM型:本质上是反射型,但是是通过用户点击,修改原本dom元素的属性,构造攻击动作
反射型和dom型区别:
     反射型是构造好了攻击动作,然后就等你打开那个页面;dom型也是等你点击,但是不是页面,通过用户动作,把原来的动作注释掉,然后加上自己修改的动作。
XSS作用:
     1.可以获得cookie
     2.仿造get、post请求做一些动作
     3.获得用户的IP
     4.识别用户软件、浏览器
     5.通过钓鱼也可以骗到用户的用户名和密码这样
XSS的防范:
1.对于截取cookie这样的操作可以在cookie上加上HttpOnly,这样js就不能访问cookie了。对于重要的cookie可以考虑加上该设置。
2.输入检查。一般是查询特殊字符,比如『<』,『>』,『、』这样,可以选择对输入进行编码,或者是筛选掉这些字符。
2.没有绝对可以防止XSS攻击的方法,因为XSS比较灵活,任何语言或者框架设计不当都有可能存在漏洞


2.CSRF
总的来说,它就是利用cookie,来盗取用户权限,从此进行操作。
cookie有session和locale两种。前者是临时的,会话关闭之后就没有了,后者是保存在本地的,当缓存过期之后才消失。如果要获取cookie,在IE6,7,8,Safari中会拦截,不让发送本地的缓存。但是在火狐,chrome上就不会拦截。

防御方法:
1.验证码。由于CSRF的攻击点在于浏览器分不清是用户发送的数据还是攻击者发送的数据,所以每次提交重要信息都要求输入验证码,这样可以保证信息是安全的。
2.服务器随机生成一个token发送,这样在请求中的cookie中要是有匹配的token,就认为是安全的请求,否则就可能有安全问题。但是token要建立在没有XSS漏洞的基础上,如果有XSS漏洞,那么攻击者通过获得页面,同样可以从cookie中获得token然后进行模拟操作。
3.用referer。确保请求是来自允许的页面…然而我觉得这个头是可以伪造的…并且服务器并不是都能取到referer头部(由于浏览器隐私保护策略),所以并不是很认同这种方式

3.SQL注入
SQL注入是通过猜测后台查询数据库的语句和数据库的情况,然后后台把用户输入的查询当做查询的一部分来查询数据库,如果构造得当,改变了SQL语句,就可以获得数据库内容甚至权限等等。
防御:
1.使用预编译语句或者存储过程,这样攻击者不能改变SQL语句的结构,就不能擅自查询了。预编译绑定变量,比如SQL语句变量用?表示,这样就无法改变原语句结构了。存储过程没有预编译那么安全,它是把要查询的过程(语句)先存储在数据库,还是有可能存在注入,所以要注意过程中尽量避免使用动态的SQL语句
2.检查输入的数据类型。比如只能是整型这样,这种方式可以很大程度上对抗注入
3.使用安全的函数。对输入进行安全编码后使用
4.注重数据库的权限放行。对于root权限的使用要很注意,遵循『最小权限原则』


*****************XSS和CSRF的区别(from:http://www.cnblogs.com/easytools/archive/2012/06/01/2529350.html)****************************

大家对于这2个攻击可能比较混淆,因为从名字上就很容易混淆,csrf跨站点伪装请求和xss跨站点攻击。

我一开始也对这两个东西搞混淆了,后面发现他们的最根本区别。

 

CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。

预防措施,请求中加入随机数,让钓鱼网站无法正常伪造请求。

 

XSS攻击的主要目的则是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的生份登陆,做一些破坏。

预防措施,防止下发界面显示html标签,把等符号转义


你可能感兴趣的:(前端!。)