网络攻击防范(SQL注入、XSS、CSRF、DDos)

1)如何防范SQL注入

1、使用PDO预处理的方式,也就是一个萝卜一个坑。

预处理。将输入的数值,绑定到参数,也就是放进坑里(一个萝卜一个坑,一个参数一个坑),这样输入的内容(外部的内容)就都落到坑里了,在每个坑里处理每个参数,这样就安全了,不会出现SQL注入。

2、使用htmlspecialchars()等函数进行转义。还可以对输入类型进行检测,类型转换。

2)如何防范CSRF攻击

1、使用token进行验证。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。(使用GET或POST方法加TOKEN)

2、验证HTTP Referer字段。HTTP Referer字段,记录该HTTP请求的来源。如果来源是外部,那么就拒绝这个请求。(这个方法不安全,可以篡改HTTP Referer字段)

3、一般框架,像ThinkPHP、laravel有表单令牌可以做防范。

4、相关文章:https://www.ibm.com/developerw 

3)如何防范XSS攻击

1、案例:听以前在阿里的同事分享:之前淘宝有一个意见反馈功能,有一天后台人员查看用户提交的意见,打开的某一条意见的瞬间,自动跳转到了另一个网站。但当时幸亏是阿里内网,对外网做了限制,没有造成危害。可见,XSS不可小觑。

2、防范:最简单的办法,过滤输入。对用户的输入,可以使用htmlspecialchars()等函数进行过滤转义,当然,一些文件上传等,也可能会造成此攻击,要限制上传文件的类型,比如只能传图片等。

---------------------------------------------------------------------------------------------------------------------

1)   SQL注入攻击(SQLInjection)

攻击方法:

攻击者在HTTP请求中注入恶意SQL命令,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。

防范方法:

1.      检查变量数据类型和格式,过滤特殊语句

和防XSS攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的SQL,如:drop table 等。

2.      参数绑定

使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多数据访问层框架,如Hibernate, TP, yii 等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL测参数,而不是SQL命令被执行。

注:PDO解释

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

pdo的处理方法是在prepare函数调用时,将预处理好的sql模板(包含占位符)通过mysql协议传递给mysqlserver,告诉mysql server模板的结构以及语义。当调用execute时,将两个参数传递给mysql server。由mysql server完成变量的转移处理。将sql模板和变量分两次传递,即解决了sql注入问题。

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");//预处理
$stmt->bindParam(1, $name);//参数绑定
$stmt->bindParam(2, $value);
 
// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();


2)   跨网站脚本攻击(CrossSite Scripting, XSS)

攻击方法:

恶意攻击者通过往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到恶意攻击用户的特殊目的。这些恶意代码通常是JavaScript、HTML以及其他客户端脚本语言。

常见的XSS攻击类型有两种。一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的连接,达到攻击的目的。攻击者还可以偷取用户cookie、密码等重要数据,进而伪造交易、盗窃用户财产、窃取情报。另一种是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的WEB站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。此种攻击经常使用在论坛、博客等Web应用中。

防范方法:

完善的过滤体系,永远不相信用户的输入。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。、

1.       对某些html危险字符转义,如“>”转义为“&gt”、“<”转义为“&lt”

比如用户输入:<script>window.location.href=”http://www.baidu.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

2.      HttpOnly

防止XSS攻击者窃取Cookie。

3)   跨网站请求伪造攻击(CrossSite Request Forgeries, CSRF)

区别: XSS攻击站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站.攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,发表评论,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

攻击方法:

CSRF的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。

攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。

防范方法:(识别请求者身份)

1、表单Token

   CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获取所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不相同,从正常页面提交的请求会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否存在且正确以确定提交者是否合法。

2、检查内置的隐藏变量

注:Token解释(详见csnd博客)

Token,就是令牌,最大的特点就是随机性,不可预测。一般黑客或软件无法猜测出来。Token一般用在两个地方——防止表单重复提交、anti csrf攻击(跨站点请求伪造)。

两者在原理上都是通过sessiontoken来实现的。当客户端请求页面时,服务器会生成一个随机数Token,并且将Token放置到session当中,然后将Token发给客户端(一般通过构造hidden表单)。下次客户端提交请求时,Token会随着表单一起提交到服务器端。
然后,如果应用于“anti csrf攻击”,则服务器端会对Token值进行验证,判断是否和session中的Token值相等,若相等,则可以证明请求有效,不是伪造的。
不过,如果应用于“防止表单重复提交”,服务器端第一次验证相同过后,会将session中的Token值更新下,若用户重复提交,第二次的验证判断将失败,因为用户提交的表单中的Token没变,但服务器端session中Token已经改变了。

上面的session应用相对安全,但也叫繁琐,同时当多页面多请求时,必须采用多Token同时生成的方法,这样占用更多资源,执行效率会降低。因此,也可用cookie存储验证信息的方法来代替session Token。比如,应对“重复提交”时,当第一次提交后便把已经提交的信息写到cookie中,当第二次提交时,由于cookie已经有提交记录,因此第二次提交会失败。
不过,cookie存储有个致命弱点,如果cookie被劫持(xss攻击很容易得到用户cookie),那么又一次gameover。黑客将直接实现csrf攻击。

4)   Session固定攻击(SessionFixation)

攻击方法:

攻击者预先设定session id,让合法用户使用这个sessionid来访问被攻击的应用程序,一旦用户的会话ID被成功固定,攻击者就可以通过此session id来冒充用户访问应用程序。

防范方法:
1.定期更改session id

2.更改session的名称

3.关闭透明化sessionid

4.只从cookie检查session id

5.使用URL传递隐藏参数

5)    Cookie攻击

攻击方法:

通过Java Script非常容易访问到当前网站的cookie。你可以打开任何网站,然后在浏览器地址栏中输  入:javascript:alert(doucment.cookie),立刻就可以看到当前站点的cookie(如果有的话)。攻击者可以利用这个特性来取得你的关键信息。例如,和XSS攻击相配合,攻击者在你的浏览器上执行特定的Java Script脚本,取得你的cookie。假设这个网站仅依赖cookie来验证用户身份,那么攻击者就可以假冒你的身份来做一些事情。
现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性

防范方法:

1. 不要在Cookie中保存敏感信息
2. 不要在Cookie中保存没有经过加密的或者容易被解密的敏感信息
3. 对从客户端取得的Cookie信息进行严格校验

注:Cookie HttpOnly

Cookie都是通过document对象获取的,我们如果能让cookie在浏览器中不可见就可以了,那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了。而浏览器在浏览网页的时候不受任何影响。

6)   Session劫持攻击(SessionHijacking)

攻击方法:

攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。

防范方法:
1.定期更改session id
2.更改session的名称
3.关闭透明化session id
4.设置HttpOnly。通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。

7)   文件上传漏洞攻击(FileUpload Attack)

攻击方法:

攻击者利用程序缺陷绕过系统对文件的验证与处理策略将恶意代码上传到服务器并获得执行服务器端命令的能力。

防范方法:
1.文件上传的目录设置为不可执行;
2.判断文件类型,设置白名单。对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码;
3.使用随机数改写文件名和文件路径:一个是上传后无法访问;再来就是像shell、.php 、.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击;

8)       DDos

攻击方法:

DDoS攻击通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的。打开IIS,服务器带宽使用流量马上上升,与被DDOS攻击相反,DDOS攻击是不断接收到大量的数据,Php ddos则是对外发送大量的数据包,造成服务器网络堵塞,此时服务器可能会掉包严重或者表现为经常性的断线。

防范方法:

升级系统,及时安装补丁;查找系统漏洞;优化系统资源,提高web负载能力;关闭不必要的服务与端口;限制特定的流量;
 

猜你喜欢

转载自blog.csdn.net/hyy147/article/details/90177948