了解web安全

195 阅读8分钟

web安全都有哪些?

什么是web安全?web安全包括哪些?如何防范web漏洞?

web安全可以分为俩大类:一、客户端安全,二、服务端安全。

接下来进入详细了解

一 客户端脚本安全

1.浏览器安全

浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或者设置某些属性。

这一策略极其重要,试想如果没有同源策略,可能a.com的一段js脚本,在b.com未曾加载此脚本是,也可以随意涂改b.com的页面(在浏览器中显示)。

为了不让浏览器页面行为发生混乱,浏览器提出了"origin"(源)的概念,来自不同的origin的对象无法互相干扰。

2.跨站脚本攻击(xss)

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。

因此有人将跨站脚本攻击缩写为XSS。如果你听到有人说 “我发现了一个XSS漏洞”,显然他是在说跨站脚本攻击。

(1)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。

(2)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。

(3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。

3.跨站点请求伪造(csrf)

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。

由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

4.点击劫持

总的来说,当你访问一个恶意网站的时候,攻击者可以控制你的浏览器对一些链接的访问,这个漏洞影响到几乎所有浏览器,除非你使用 lynx 一类的字符浏览器。

这个漏洞与 JavaScript 无关,即使你关闭浏览器的 JavaScript 功能也无能为力。事实上这是浏览器工作原理中的一个缺陷,无法通过简单的补丁解决。

一个恶意网站能让你在毫不知情的情况下点击任意链接,任意按钮或网站上任意东西。

如果这还不能让你恐慌的话,想想这样的情形,一个用户在被攻击的时候将毫不知情而且束手无策:比如在 Ebay,因为可以嵌入 JavaScript,虽然攻击并不需要 JavaScript,但可以让攻击更容易进行。

只用 lynx 字符浏览器才能保护你自己,同时不要任何动态的东西。该漏洞用到 DHTML,使用防 frame 代码可以保护你不受跨站点攻击,但攻击者仍可以强迫你点击任何链接。你所做的任何点击都被引导到恶意链接上,所以,那些 Flash 游戏将首当其冲。

据 Hansen 讲,他们已经同微软以及 Mozilla 谈论过这个问题,然而他们均表示这是个非常棘手的问题,没有简单的解决办法。 Grossman 确切表示,微软最新的 IE8 和 Mozilla 最新的 Firefox 3 均不能幸免。 当前,唯一的办法是禁用浏览器的脚本和插件功能。

二 服务端应用安全

1.注入安全

1)sql注入

SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。

而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。

如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。

2)数据库攻击

常用的攻击技巧

  • sql注入可以猜解出数据库对应的版本和username和password具体的值.
  • 命令执行
  • 攻击存储过程
  • xp_cmdshell
  • 编码问题-不同的字符编码有可能导致一些安全问题.曾经出现过"基于字符集"的注入攻击技巧
  • sql column truncation 攻击方式

如何正确防御sql注入攻击

  • 使用预编译语句
  • 使用存储过程
  • 检查数据类型
  • 使用安全函数

2.文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。

显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

常见校验上传文件的方法
<1>客户端校验

1.通过javascript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式。

2.判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。

<2>服务器端校验

1.校验请求头 content-type字段,例如用PHP检测

2.通过自己写正则匹配来判断文件幻数(文件头)内容是否符合要求,一般来说属于白名单的检测,常见的文件头(文件头标志位)如下

  • .JPEG;.JPE;.JPG,”JPGGraphicFile”(FFD8FFFE00)
  • .gif,”GIF89A”(474946383961)
  • .zip,”ZipCompressed”(504B0304)
  • .doc;.xls;.xlt;.ppt;.apr。

3.文件加载检测:一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传

4.一次渲染(代码注入)

5.二次渲染

6.后缀名黑名单校验

7.后缀名白名单校验

8.自定义WAF校验,即使用不同的WAF产品来进行过滤,通常是独立与服务程序的一段中间程序或者硬件

3.应用层拒绝服务攻击

1)ddos攻击

分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)

是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。

由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。

2)cc攻击

cc攻击的原理非常简单,就是对一些消耗资源比较大的应用页面不断发起正常的请求,以达到消耗服务器资源的目的。

在web应用中,查询数据库\读写磁盘等操作,相对消耗比较多的资源。

3)限制请求频率
4)验证码校验人机
5)slowwloris攻击

原理是以极低的速度往服务器发送http请求。由于webserver对并发的连接数都有一定上限,因此若是恶意的占用住这些链接不释放掉,那么webserver的所有链接都将被恶意链接占用,从而无法接受新的请求,导致拒绝服务。

6)http post dos

原理是在发送http post 包时,指定一个非常大的content-length值,然后以很低的速度发包,从而导致dos。