网络安全-常见网络安全攻击

主要介绍比较常见的3种网络安全攻击手段,分别是:跨站脚本攻击(XSS)攻击、跨站请求伪造(CSRF)攻击、SQL注入攻击。

1、XSS攻击:应该算是最普遍的应用程序层攻击之一,攻击的目的是盗走客户端 cookies,或者任何可以用于在 Web 站点确定客户身份的其他敏感信息。

用这三种方式可以保护站点不受 XSS 攻击:

1.执行内部的输入过滤(有时候称为输入清洁设备)。对于内部书写的每个脚本中的每个用户输入 —— 参数或 HTTP 头,都应该应用高级的 HTML 标签(包括 JavaScript 代码)过滤。举例来说,应该过滤 <script> 标签。该方法有一些严重的不利因素:
* 要求应用程序的编程人员非常精通安全。

* 要求编程人员覆盖所有可能的输入来源(查询参数、POST 请求的 body 参数、HTTP 头)。* 它不能抵御第三方脚本或服务器中的安全漏洞。举例来说,它不能防御 Web 服务器错误页面中的问题(通常显示了资源的路径)。

2、执行“输出过滤”,换句话说,当发回给浏览器时过滤用户数据,而不是当被脚本接收时。一个很好的示例是通过一个脚本将输入数据插入到数据库中,然后再从数据库呈现数据。在这种情况下,重要的是不向原始的输入字符串应用过滤,而只向输出版本应用过滤。这种方法的缺陷类似于对输入过滤的缺陷。

3、通过安装第三方应用程序防火墙,防火墙在 XSS 攻击到达 Web 服务器和易受攻击的脚本之前拦截它们,并阻塞它们。不论是来自内部应用程序的脚本或路径、第三方脚本,或根本不描述资源的脚本(举例来说,用来引起来自服务器的 404 页面响应的脚本),应用程序防火墙都可以以一般的方式覆盖所有输入方法(包括路径和 HTTP 头)。对于每个输入源,应用程序防火墙根据各种 HTML 标签模式和 JavaScript 模式检查数据。如果匹配成功,就拒绝该请求,恶意的输入不会到达服务器。

2、SQL注入攻击:跟XSS攻击有点类似,以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的。对于SQL注入攻击的详细介绍,可以上网搜索《SQL注入攻防入门详解》这篇文章,讲得比较详细了。

防止SQL注入攻击:

* 类型检查:对接收数据有明确要求的,在方法内进行类型验证。如数值型

* 长度验证:要进行必要的注入,其语句也是有长度的。所以如果你原本只允许输入10字符,

那么严格控制10个字符长度,一些注入语句就没办法进行。

* 关键字过滤:这个门槛比较高,因为各个数据库存在关键字,内置函数的差异,所以对

编写此函数的功底要求较高

* 参数化查询:在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有具有损的指令,也不会被数据库所运行

3、CSRF攻击

   CSRF攻击是黑客借助受害者的 cookie 骗取服务器的信任,但是黑客并不能拿到 cookie,也看不到cookie的内容(跟XSS攻击的区别)。另外,对于服务器返回的结果,由于浏览器同源策略的限制,黑客也无法进行解析。因此,黑客无法从返回的结果中得到任何东西,他所能做的就是给服务器发送请求,以执行请求中所描述的命令,在服务器端直接改变数据的值,而非窃取服务器中的数据。所以,我们要保护的对象是那些可以直接产生数据改变的服务,而对于读取数据的服务,则不需要进行 CSRF 的保护。

* 验证Http Referer字段

* 在请求地址中添加token并验证