防止 常见几种网络攻击 【CSRF】【xss】【sql注入】

xss  跨站脚本攻击

XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击

实施XSS攻击需要具备两个条件:

一、需要向web页面注入恶意代码;

二、这些恶意代码能够被浏览器成功的执行。

解决方法::

一、是在表单提交或者url参数传递前,对需要的参数进行过滤,请看如下XSS过滤工具类代码

二、 过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出

可以利用下面这些函数对出现xss漏洞的参数进行过滤

1、htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

2、htmlentities() 函数,用于转义处理在页面上显示的文本。

3、strip_tags() 函数,过滤掉输入、输出里面的恶意标签。

4、header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。

5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。

6、intval() 函数用于处理数值型参数输出页面中。

7、自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。

各语言示例:

  PHP的htmlentities()或是htmlspecialchars()。
   Python的cgi.escape()。
   ASP的Server.HTMLEncode()。
   ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
   Java的xssprotect(Open Source Library)。
   Node.js的node-validator。


csrf 跨站请求伪造

 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。


攻击过程:

  • 假设abc用户登录银行的网站进行操作, 同时也访问了攻击者预先设置好的网站.

  • abc点击了攻击者网站的某一个链接,这个链接是http://www.bank.com/xxxx指向银行,银行服务器会根据这个链接携带的参数会进行转账操作.

  • 银行服务器在执行转账操作之前会进行SESSION验证是否登录, 但是由于abc已经登录了银行网站,攻击者的链接也是www.bank.com.所以攻击的链接就会携带session id到银行服务器.

  • 由于session id是正确的,所以银行会判断操作是由本人发起的,执行转账操作.

防御CSRF攻击:

目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。

一、yii框架防御csrf攻击 点击打开链接

二、(1)验证 HTTP Referer 字段
        根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP
        请求的来源地址。
    (2)在请求地址中添加 token 并验证
        CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请
        求中所有的用户验证信息都是存在于 cookie
        中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的
        cookie 来通过安全验证。要抵御
        CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在
        于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的
        token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有
        token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    (3)在 HTTP 头中自定义属性并验证
         这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token
         以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP
         头中自定义的属性里。通过 XMLHttpRequest
         这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP
         头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入
         token 的不便,同时,通过 XMLHttpRequest
         请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过
         Referer 泄露到其他网站中去


sql 注入

SQL注入是一种将SQL代码添加到输入参数中,传递到服务器解析并执行的一种攻击手法。

SQL注入攻击是输入参数未经过滤,然后直接拼接到SQL语句当中解析,执行达到预想之外的一种行为,称之为SQL注入攻击。

sql注入产生 :

1)WEB开发人员无法保证所有的输入都已经过滤

2)攻击者利用发送给SQL服务器的输入参数构造可执行的SQL代码(可加入到get请求、post请求、http头信息、cookie中)

3)数据库未做相应的安全配置

防御sql注入::
1)检查变量数据类型和格式

1、使用正则表达式过滤传入的参数

2、PHP函数检查变量

3、前端js检查是否包函非法字符

不灵活,要写死多个检测方法

2)过滤特殊符号

对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。以PHP
为例,通常是采用addslashes函数,它会在指定的预定义字符前添加反斜杠
转义,这些预定义的字符是:单引号(') 双 引号 (") 反斜杠 (\) NULL。

相对安全,只是增加黑客的难度,还是能破解

3、绑定变量,使用预编译语句
     MySQL的mysqli驱动提供了预编译语句的支持,不同的程序语言,都分
     别有使用预编译语句的方法。实际上,绑定变量使用预编译语句是预防
     SQL注入的最佳方式,使用预编译的SQL语句语义不会发生改变,在SQL
     语句中,变量用问号?表示,黑客即使本事再大,也无法改变SQL语句的
     结构,像上面例子中,username变量传递的plhwin' AND 1=1--
     hack参数,也只会当作username字符串来解释查询,从根本上杜绝了SQ
     L注入攻击的发生。


一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。 二、XSS漏洞的危害 (1)网络钓鱼,包括盗取各类用户账号; (2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等; (4)强制弹出广告页面、刷流量等; (5)网页挂马; (6)进行恶意操作,例如任意篡改页面信息、删除文章等; (7)进行大量的客户端攻击,如DDoS攻击; (8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等; (9)控制受害者机器向其他网站发起攻击; (10)结合其他漏洞,如CSRF漏洞,实施进一步作恶; (11)提升用户权限,包括进一步渗透网站; (12)传播跨站脚本蠕虫等; 三、过滤器配置 web.xml配置 XssFilter com.xxx.Filter.XssFilter XssFilter /*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值