web攻击和防御措施

1、SQL注入:参照下面的链接

http://www.cnblogs.com/chenhaoyu/p/8758888.html

2、跨网站脚本攻击(Cross Site Scripting, XSS)

  攻击者将恶意代码注入到网页上,其他用户在加载网页时就会执行代码,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。这些恶意代码通常是JavaScript、HTML以及其他客户端脚本语言。

如果传入一段脚本<script>[code]</script>,那么脚本也会执行。

防范方法:
    1、使用htmlspecialchars函数将特殊字符转换成HTML编码,过滤输出的变量
    2、如果想更彻底的过滤,使用HTMLPurifire插件过滤,专门用来防止xss攻击的插件

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

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

与xss的不同点:

它与XSS的攻击方法不同,XSS利用漏洞影响站点内的用户,攻击目标是同一站点内的用户者,而CSRF 通过伪装成受害用户发送恶意请求来影响Web系统中受害用户的利益。

简单说下原理:首先有一个站点A,用户访问了其中一个页面,URL为/sdad/asd?uid=1&username=ww,又访问了一个站点B的其中一个页面,而这个页面中有一个img标签,如

<img src="/sdad/asd?uid=1&username=bbbb">,如果A站点的那个页面是修改用户名操作,那么当用户访问站点B的这个页面时,就触发了CSRF攻击,就把用户名ww改为了bbbb,从而实现了CSRF攻击
防御措施一:判断请求头的来源
// 检查上一页面是否为当前站点下的页面
 3 if (!empty($_SERVER['HTTP_REFERER'])) {
 4     if (parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != 'html5.yang.com') {
 5         // 可以设置http错误码或者指向一个无害的url地址
 6         //header('HTTP/1.1 404 not found');
 7         //header('HTTP/1.1 403 forbiden');
 8         header('Location: http://html5.yang.com/favicon.ico');
 9         // 这里需要注意一定要exit(), 否则脚本会接着执行
10         exit();
11     }
12  }

防御措施二:在页面生成一个随即串并保存在token中,用于在服务器中比对,参照laravel中的CSRF防御机制

4、Session劫持攻击(Session Hijacking)

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

防御方法:

1、 更改Session名称。PHP中Session的默认名称是PHPSESSID,此变量会保存在Cookie中,如果攻击者不分析站点,就不能猜到Session名称,阻挡部分攻击。

2、 关闭透明化Session ID。透明化Session ID指当浏览器中的Http请求没有使用Cookie来存放Session ID时,Session ID则使用URL来传递。

3、 设置HttpOnly。通过设置Cookie的HttpOnly为true,可以防止客户端脚本访问这个Cookie,从而有效的防止XSS攻击。

4、 关闭所有phpinfo类dump request信息的页面。

5、验证HTTP头部信息

6、每当用户登陆的时候就进行重置sessionID

7、sessionID闲置过久时,进行重置sessionID

5、文件上传漏洞攻击(File Upload Attack)

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

上传Web脚本代码,Web容器解释执行上传的恶意脚本;
上传Flash跨域策略文件crossdomain.xml,修改访问权限(其他策略文件利用方式类似);
上传病毒、木马文件,诱骗用户和管理员下载执行;
上传包含脚本的图片,某些浏览器的低级版本会执行该脚本,用于钓鱼和欺诈。
总的来说,利用的上传文件要么具备可执行能力(恶意代码),要么具备影响服务器行为的能力(配置文件)。

 防范措施:

1.文件上传的目录设置为不可执行;
2.判断文件类型,设置白名单。对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码;
3.使用随机数改写文件名和文件路径:一个是上传后无法访问;再来就是像shell、.php 、.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击;
4.单独设置文件服务器的域名:由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。
原文地址:https://www.cnblogs.com/chenhaoyu/p/8870782.html