参考 ---《白帽子讲web安全》
1:XSS(cross site script),跨站脚本攻击
1.1反射性XSS(将用户输入直接反射在浏览器上)
例子:
用户将参数直接输出在页面上:
<?php
$input = $_GET("param");
echo "<div>".$input."</div>";
?>
正常情况下在URL输入:http://www.a.com/php?param=这是一个测试
将被渲染为:<div>这是一个测试</div>
但当URL输入:http://www.a.com/php?param=<script>alert(/xss/)</script>
将被渲染为:<div><script>alert(/xss/)</script></div>,并会弹出对话框
1.2存储型XSS(会把用户输入存储在服务端,具有很强的稳定性)
例子:
黑客写了一篇博客,其中包含了恶意的javacript代码。发表后,当其他用户查看该文章,浏览器将执行这段恶意代码。
1.3 DOM based XSS(通过修改页面DOM结点形成的XSS,其实也属于反射性XSS)
例子:
<div id="want_insert"></div>
<input type="text" id="text" value="">
<input type="button" value="write" onclick="test()">
function test(){
var str = document.getElementById("text").value;
document.getElementById("want_insert").innerHTML = "<a href = '"+str+"'>link</a>";
}
若输入:hello点击按钮将会渲染成:
<a href="hello">link</a>
但若输入:' οnclick=alert(/xss/) //
将会渲染成:
点击链接将会弹出XSS弹窗:
1.4:XSS的防御
1.4.1:HttpOnly(解决XSS中的cookie劫持)
可在set-cookie时标记HttpOnly,浏览器将禁止页面的javascript代码访问带有HttpOnly属性的cookie
1.4.2:输入检查(XSS filter)
过滤掉一些特殊字符如:< > ' " <script> javascript等敏感字符
1.4.3:输出检查
除了富文本的输出之外,在变量输出到html时,可以进行编码或转义来防御XSS
如:&变为&、<变为<、”变为"等
1.4.4:处理富文本
某些论坛需要用户提交自定义的html代码,称之为“富文本”
过滤富文本原则:
1:过滤包含“事件”的标签,如:<iframe>、<script>、<form>等
2:应使用白名单标签,只允许如:<a>、<img>、<div>等安全标签存在XSS
2:CSRF(cross site request forgery),跨站请求伪造
实例:
黑客在自己的钓鱼网站:www.a.com/csrf.hmtl放入一个img标签:
<img src = "http://blog.sohu.com/manage/entry.do?m=delete&id=1"/>
当其他用户访问该钓鱼网站,除了看到无法显示的图片之外,会发现id=1的搜狐博客被删除了。
事实上当访问www.a.com/csrf.hmtl时,图片标签向搜狐服务器发送了一个get请求,这个请求导致了搜狐上id为1的博客被删。
仅仅是让用户访问一个钓鱼网站,就能以该用户的身份在第三方网站完成一次操作。删除博客文章这个请求是伪造的,顾名跨站请求伪造。
原因:
浏览器持有的cookie分为两种:session cookie (浏览器关闭后该cookie就失效)和本地cookie(只有expires时间到了才会失效)
用户在A域登录,将会收到session cookie和本地cookie。用户在钓鱼网站(B域)通过<iframe>、<img>等访问A域,结果是:
若是IE浏览器则只能收到session cookie;若是Firefox则两者都能收到(firefox的默认策略就是允许发送第三方cookie)
所以在上述案例中,使用的是firefox浏览器,能成功发送用户认证的本地cookie给搜狐,最终导致CSRF成功。但若使用IE浏览器,就必须得让该用户先登录搜狐页面,使得session cookie有效再实施攻击。
CSRF防御:
1:验证码
2:referer check
如:论坛发帖的操作,正常情况下都得登录到后台,并提交发帖的表单,referer的值必然是发帖表单所在的页面。如果该值不是这个页面,甚至不同源,则极有可能发生CSRF攻击。
3:token
3:DDOS(Distributed Denial of Service),分布式拒绝服务
不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。
打个比方,两家相互竞争的商铺,一家为了抢生意,雇佣大批人挤在对方商铺,赖着不走,让真正的顾客无法进入,或者和店员东拉西扯,妨碍正常工作,让对手错过真正的顾客,造成损失。DDoS攻击利用的就是这种思路。
DDoS攻击通过大量合法的请求占用大量网络资源,以达到使网络瘫痪的目的。
攻击方式可分为以下几种:
1、通过使网络过载来干扰甚至阻断正常的网络通讯;
2、通过向服务器提交大量请求,使服务器超负荷;
3、阻断某一用户访问服务器;
4、阻断某服务与特定系统或个人的通讯。
到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。不过这不等于我们就没有办法阻挡DDoS攻击,我们可以尽力来减少DDoS的攻击。
防御方法:
1:确保服务器的系统文件是最新的版本,并及时更新系统补丁。
2:关闭不必要的服务。
3:限制同时打开的SYN半连接数目。
4:缩短SYN半连接的time out 时间。
5:正确设置防火墙
禁止对主机的非开放服务的访问
限制特定IP地址的访问
启用防火墙的防DDoS的属性
严格限制对外开放的服务器的向外访问
运行端口映射程序祸端口扫描程序,要认真检查特权端口和非特权端口。
6:认真检查网络设备和主机/服务器系统的日志。只要日志出现漏洞或是时间变更,那这台机器就可能遭到了攻击。
7:限制在防火墙外与网络文件共享。这样会给黑客截取系统文件的机会,主机的信息暴露给黑客,无疑是给了对方入侵的机会。
8:路由器