Web安全:概述

  • Post author:
  • Post category:其他




浏览器安全



同源策略

浏览器的同源策略,限制了来自不同源的“document”或脚本对当前“document”的读取或修改。

影响源的因素有:host、子域名、端口、协议等。



多进程结构

将浏览器的各个功能模块分开,各个浏览器实例分开,这样若一个进程崩溃,也不会影响到其他进程。

Google Chrome是第一个采取多进程架构的浏览器,其主要进程包括:浏览器进程、渲染进程、插件进程、扩展进程等。其中插件进程如flash、java、pdf等与浏览器进程严格隔离,不会相互影响。



沙箱

设计目的是为了让不可信任的代码独立运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源,如果一定要跨过沙箱的边界进行数据交换,只能通过指定的数据通道(如封装好的API)来进行,而在此过程中会对请求的合法性进行严格的检查。



恶意网址拦截

常见的恶意网址有两种;挂马网站和钓鱼网站。挂马网站通常包含有恶意的脚本如JavaScropt或flash,会利用浏览器的漏洞执行shellcode,在用户电脑中植入木马。钓鱼网站会通过模仿正常网站来诱骗用户。

恶意网址拦截主要是通过浏览器厂商建立黑名单实现的,现在还引入了EVSSL证书。



跨站脚本攻击XSS



定义

XSS通常指黑客通过HTML注入篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。



示例

假设一个php页面把用户输入的参数直接回显到页面上

在这里插入图片描述

若用户以GET请求访问此页面

在这里插入图片描述

则页面源代码中将会出现

在这里插入图片描述

如果攻击者伪造一个URL如:

在这里插入图片描述
则页面会解析提交的<script>标签,从而执行alert

在这里插入图片描述



分类

  • 反射型XSS:把用户提交的数据“反射“给浏览器,也叫做非持久型XSS,如上例。
  • 存储型XSS:恶意脚本被保存在服务器端的某页面,所有访问此页面的用户都会在浏览器中执行恶意脚本。
  • DOM Based XSS:通过修改页面的DOM节点形成的XSS。



跨站点请求伪造CSRF



本质

服务端编写的不太合理,其重要操作的很多参数都是可以被攻击者获取和伪造的。



示例

在这里插入图片描述

攻击者欺骗用户(博客主)访问此链接,若用户使用Firefox2浏览器,其加载img标签时向搜狐的服务器发起了一次带参数的GET请求,而Firefox2浏览器默认策略是允许发送第三方Cookie的,因此搜狐认为此请求是用户行为,则将文章删除。



防御

对于开发者来说,使用验证码是最简洁有效的防御方法,它强制用户作出一定操作时必须作出确认,可有效防范CSRF。但从用户体验的角度来看,验证码更应该被作为一种辅助手段。

此外,检查Referer也能在一定程度上防御CSRF,但问题在于,服务器并不是在所有情况下都能取得Referer的,如用户出于隐私保护的考虑限制了Referer的发送。

目前最为通用的方法是采用Token。如在上例中新增一个随机参数Token,正常情况下,此参数是由服务器与客户端共同持有的,可以放在用户session或浏览器的Cookie中,服务器收到请求时校验表单中的Token与session或Cookie中的Token是否一致,不一致则认为是非法请求。



点击劫持



定义

点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的iframe覆盖在网页上,然后欺骗用户在该网页上点击,从而诱导其完成一些特定操作。



防御

针对传统的基于iframe的点击劫持,可以通过禁止iframe嵌套进行防御



SQL注入



必要条件

  • 用户能够控制SQL查询参数的输入。
  • 服务器端将用户提交的参数拼接到SQL语句中去执行。



常见手段

  • 盲注:构造简单的条件语句,根据返回页面是否发生变化来判断SQL语句是否得到执行。
  • TimmingAttack:利用BENCHMARK()函数,如果恶意语句得到执行,则结果返回的时间会比平时长很多。



防御

  • 检查数据类型:如严格的检查邮箱格式、时间日期等。
  • 使用黑名单对用户输入进行过滤:有一定效果但是

    理论上来说总能被绕过。
  • 使用预编译语句:将用户提交的数据只作为SQL查询的参数而非SQL语句的一部分,这种方法能从根本上防范注入。



文件上传



必要条件

  • 文件上传后不会作改动。
  • 上传的文件能被web容器解释执行。
  • 用户能访问到这个文件。



常见手段

  • 上传web脚本语言,被服务器的web容器解释执行。
  • 上传Flash的策略文件后,攻击者可控制Flash在该域下的行为。
  • 上传病毒木马等,攻击者欺骗用户、管理员下载执行。
  • 上传包含脚本的图片,利用浏览器漏洞进行执行。



绕过

若服务器进行了文件后缀检查,可以使用%00截断的方法:如服务器只允许上传jpg文件,则攻击者上传一个php文件,拦截修改POST包,将其重命名为

xxx.php[%00].jpg

,可以绕过后缀检查,在服务器端处理时,很多语言会将[%00]作为终止符,从而进行截断,最终上传的文件名变为了

xxx.php

若服务器进行了文件头检查,如允许上传jpg文件,但会检查文件的前10个字节来判断,则攻击者可以伪造一个合法的文件头,而将php代码附在合法的文件头之后。如果web server将此文件当做PHP文件解析,则恶意代码可得到执行。



防御

  • 文件上传的目录设置为不可执行:将其作为静态文件处理。
  • 对图片进行压缩、水印处理:可以有效破坏其中的恶意代码。
  • 使用随机生成的文件名:防止用户能访问到文件。



DDoS



定义

Distributed Denial of Service,分布式拒绝服务攻击,是指利用合理的请求造成资源过载,导致服务器不可提供服务的攻击手段。



分类

DDoS分为两类:网络层的DDoS和应用层DDoS。

网络层DDoS是指利用TCP/IP协议族的一些特征,通过大量发包将带宽占满,快速消耗目标主机资源,造成网络堵塞和服务不可用,比如SYN flood、UDP flood、ICMP flood。这类攻击比较简单,用带DDoS FPGA芯片的硬件很容易识别和防护,云服务商也提供一定容量的网络DDoS防护能力。网络层DDoS由于收益小、易被识别和拦截,价值并不大,通常被用作应用层DDoS攻击前的伪装和掩护。

应用层DDoS是指攻击者通过代理服务器或者僵尸网络向攻击目标发送大量的高频合法请求, 同样达到快速消耗目标主机资源、造成网络堵塞和服务不可用的目的。常见的应用层DDoS攻击包括DNS flood、HTTP慢连接攻击、CC攻击。需要注意的是,这些请求都是合法的,因此很难被识别和过滤。

作者:F5 Networks

链接:https://www.zhihu.com/question/19581905/answer/1982518998

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



示例

SYN flood:利用TCP三次握手的缺陷,使用大量肉鸡对服务器发送一个SYN后便不再回复,则服务器需要消耗大量的资源维持并处理这些半连接,导致不能正常提供服务。



防御

  1. 蜜罐引流:将攻击流量引流到蜜罐,进行攻击溯源和诱捕。

  2. 客户端挑战:返回js来检测是正常的客户端还是攻击脚本。

  3. 人机识别:返回验证码来检测是正常用户还是伪装成用户的BOT。

  4. 请求限流限速或彻底阻断。



版权声明:本文为weixin_43249758原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。