目录
xss注入漏洞原理
XSS的基本概念
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。xss是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户
在WEB2.0时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。
xss漏洞可以用来进行钓鱼攻击,前端js挖矿,用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制
XSS攻击的主要途径
XSS攻击方法只是利用HTML的属性,作各种的尝试,找出注入的方法。现在对三种主要方式进行分析。
1.第一种:对普通的用户输入,页面原样输出,用户通过对JSCODE的伪装,经过一些操作就会跳出一个木马界面,取得登录用户的Cookie.
2.第二种:在代码区里有用户输入的内容
原则就是,代码区中,绝对不应含有用户输入的东西。
3.第三种:允许用户输入HTML标签的页面。
用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂。
XSS漏洞的类型:
反射型、存储型、DOM型
XSS的危害
流量劫持
获取用户cookie信息,盗取账号
篡改、删除页面信息(钓鱼)
配合CSRF攻击,实施进一步攻击
修复和防范方法
三种类型的XSS漏洞都可以通过过滤或编码进行修复。
反射型XSS和存储型XSS可以在服务端对用户输入输出的内容过滤和编码操作,将关键字进行过滤处理,关键符号进行编码处理,如将所有on事件,script等关键字进行过滤,将所有<,>,”,’,=等特殊符号进行实体化编码或url编码便可以修复。
DOM型XSS如有在服务端进行交互,也可参考上述的方法进行修复,如未和服务端进行交互,可在客户端使用JavaScript等客户端脚本语言进行编码和过滤处理
SQL注入
原理
SQL注入就是指web应用程序对用户输入的数据没有仔细过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过构造恶意的sql语句来 实现对数据库的任意操作。
分类
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
产生原因
SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
修复方法
1)使用参数化查询接口或在代码级对带入SQL语句中的外部参数进行转义或过滤;
2)对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验;
3)对于字符串,对SQL语句特殊字符进行转义,单引号转成两个单引号,双引号转成两个双引号。
CSRF漏洞
简介
CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。
原理
CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作
具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF攻击分类
CSRF漏洞一般分为站外和站内两种类型。
CSRF站外类型的漏洞本质上就是传统意义上的外部提交数据问题。通常程序员会考虑给一些留言或者评论的表单加上水印以防止SPAM问题(这里,SPAM可以简单的理解为垃圾留言、垃圾评论,或者是带有站外链接的恶意回复),但是有时为了提高用户的体验性,可能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的Web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET、POST请求,当用户在会话状态下点击链接访问站外Web页面,客户端就被强迫发起请求。
CSRF站内类型的漏洞在一定程度上是由于程序员滥用类变量造成的。在一些敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起请求传递参数给程序,但是由于使用了REQUEST类变量造成的。在一些敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起POST请求传递参数给程序,但是由于使用了_REQUEST等变量,程序除支持接收POST请求传递的参数外也支持接收GET请求传递的参数,这样就会为攻击者使用CSRF攻击创造条件。一般攻击者只要把预测的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起这些请求。
CSRF的防御
1)通过 referer、token或者验证码来检测用户提交。
2)尽量不要在页面的链接中暴露用户隐私信息。
3)对于用户修改删除等操作最好都使用post 操作。
4)避免全站通用的cookie,严格设置cookie的域。