在开放的互联网环境下,总有一些非法的用户想要攻击你的web站点,所以在这里记录一些和web安全相关的总结。

文章中所有的列子都以PHP语言为例。

XSS攻击

XSS攻击——跨站脚本攻击。一般是攻击者将恶意的代码写入到页面中,当正常用户访问网页时,会触发这些恶意注入的代码。

造成的后果:

  • 网页展示异常,网页展示的是攻击者串改过的非正常页面。
  • 攻击者利用普通用户的登录状态,进行一些非法操作,比如把你自己的文章全删了。
  • 盗用cookie信息,进行一些风险性的操作。

反射型

反射型XSS,一般出现在url地址中。需要用户访问携带了恶意代码的地址才可以触发,且只会触发一次。一般出现在网站的搜索功能中。

存储型

反射型XSS,也叫“持久型”XSS攻击,恶意代码通过表单提交的方式,存储在站点的服务器当中,当正常用户访问页面时,就会触发。一般出现在评论、文章发布等。

XSS的防御

XSS主要通过注入html、JavaScript代码等方法。所以可以采用过滤标签和转义特殊字符的方法。

  • 标签过滤,标签过滤可以使用一些正则表达式,过滤掉如scriptonclick等标签,这样注入的代码将无法正常执行。

  • 转义特殊字符,在这个一切以用户体验为主的时代,这个方法相对于标签过滤来说,无疑是更好的。它只是将特殊字符转换为 HTML 实体,在页面显示的时候,不会过滤掉用户发布的任何信息。在PHP中提供了htmlspecialchars这个方法。

CSRF攻击

CSRF攻击——跨站请求伪造。顾名思义就是攻击者伪装成被攻击者(以被攻击者的身份)进行一些操作。

说CSRF之前就要先说一下浏览器的同源策略。那什么是同源策略?

同源策略是指在同一种、同一域名及同一端口下才可以共享cookie等数据。

CSRF攻击通过绕过同源策略的安全机制,来利用被攻击者在某个网页登录的信息来进行一些恶意的攻击。比如小白用户A登录了某xx银行,此时A打开了攻击者B发布的一个链接http://test.foo.com/,A认为这是一个安全链接,于是就访问了这个恶意的链接;在这个恶意的链接所对应的网站下,其实嵌套了一个转账行为;于是A莫名奇妙的少了1块钱。

CSRF的防御

通过上面的列子,我们知道了这种攻击是通过第三方网站请求我们的服务(第三方网站利用了我们的用户登录信息)导致的。一般的防御方法有:

  • 判断请求头中的referer信息,来判断是否是自己的网站发起的请求。
  • 对于一些表单提交的POST请求,可以颁发临时token,这样一来,根据者所提交的表单我们就可以根据这个token来判断是无效的。

SQL注入

sql注入的问题,应该是服务端编写代码不严谨才会导致的问题。常见的sql注入有很多种,这里写几个有代表性的。

举个常见的后台身份绕过漏洞的列子,当我们要登录一个网站时,我们输入的密码为“123456’ or 1 = 1 –”。

那通过表单的提交,后端sql的组装,传递到mysql就是这样一句sql:

1
select * from user where username = 'lustre' and pwd = '123456' or  1 = 1 -- '

这就是or大法,成功绕过了密码校验。

针对上面的这种情况,一方面我们可以将用户的参数进行过滤或者转义,另一方面可以使用PDO占位符进行处理。

1
2
3
4
5
$pdo = new PDO("mysql:host=localhost; dbname=demo", "user", "pass");
$pdo->exec("set names 'utf8'");
$sql="select * from user where username = ? and pwd = ?";
$stmt = $pdo->prepare($sql);
$exeres = $stmt->execute(array($testname, $pass));

上面的示例代码就可以防范sql注入,因为执行prepare方法时,查询的语句已经传递给了mysql,php程序没有提交任何参数,当执行execute方法时,参数才被传递过去。

关于sql注入,这里只是冰山一角,目前掌握的也不多,只能说到这里了,呃……

DDoS攻击

DDos攻击——分布式拒绝服务攻击

这个解释感觉不好理解,其实就是攻击者利用很多“肉鸡”去攻击某个站点。当然这些“肉鸡”可能也是受害者。比如攻击者先用XSS攻击手段去攻击了一个流量很大的网站,然后让这些用户又去被动访问攻击的目标站点,导致短时间内站点流量剧增,影响正常用户访问。

知乎上举了个列子,我觉得很形象。

我开了一家有五十个座位的重庆火锅店,由于用料上等,童叟无欺。平时门庭若市,生意特别红火,而对面二狗家的火锅店却无人问津。二狗为了对付我,想了一个办法,叫了五十个人来我的火锅店坐着却不点菜,让别的客人无法吃饭。

如何应对 DDoS 攻击?

  • 上高防

  • 黑名单

  • DDoS 清洗