若攻击者能够破坏应用程序的会话管理,他就能轻易避开其实施的验证机制,不需用户证书即可伪装成其他应用程序用户
如果攻击者以这种方式公婆一个管理用户,那么他就能控制整个应用程序
尽可能缩短一个会话的寿命可降低攻击者截获、猜测或滥用有效会话令牌的可能性
其次,如果用户不再需要现有会话,终止会话为用户提供一种使其失效的途径,在进一步降低
上述可能性的同时,在某种程度上确保共享计算机环境中会话的安全
一些应用程序并不实施有效的会话终止功能
会话一旦建立,它在收到最后请求后的许多天内仍然有效,直到服务器最终将其清除
有些时候,退出功能实际上并不能帮助服务器终止会话
即使服务器从用户的浏览器中删除令牌(例如,通过发布一个清空令牌的Set-Cookie指令)
然而,如果用户继续提交这个令牌,服务器仍然会接受它
最糟糕的情况:当用户单击“退出”按钮时,应用程序并不能与服务器通信,因此服务器不采取任何行动
相反,应用程序执行一段客户端脚本清空用户的cookie,在随后的请求中将用户返回到登录页面
访问这个cookie的攻击者就能使用会话,好像用户从未退出一样
攻击者通过网络嗅探、XSS攻击等方式获取被攻击者会话令牌的攻击方式
这种攻击方式最简单也是最有效,也是目前最多采用的攻击方式
1.令牌传输安全
令牌只能通过HTTPS传送
如果使用HTTP cookie传送令牌(大多数情况下),应将这些cookie标记为secure,以防止用户浏览器通过HTTP传送它们
2.增加软硬会话过期
软会话过期,指的是用户在一定时间内与应用系统没有交互,则会话过期,也就是我们常说的Session失效
硬会话过期,指的是用户登录到系统中经过一定时间后,不管用户做什么,该会话都会过期
3.提供完善的注销功能
用户可以手动地使当前会话过期,这就是我们在几乎所有网站上都看到的logout按钮
TIPS:要保证注销不存在会话终止漏洞
探知数据库的具体结构,为进一步攻击做准备
泄露数据,尤其是机密信息、账户信息等
获得更高权限,来修改表数据结构甚至是内部结构
参数化查询是对SQL注入根本性的防御策略,也叫做预处理语句,在建立一个包含用户输入的SQL语句时分为两步:
1.反射式XSS
也称为非永久性XSS,是目前最流行的XSS攻击
出现在服务器直接使用客户端提交的数据,如url的数据、html表单中提交的数据,并且没有对数据进行无害化处理
如果提交的数据中含有HTML控制字符而没有被正确处理,那么一个简单的XSS攻击就会发生
典型的反射式攻击可通过一个邮件或中间网站,诱饵是一个看起来可信的站点的链接,其中包含XSS攻击脚本
如果信任的网站没有正确处理这个脚本,用户点击后就会导致浏览器执行含有恶意攻击的脚本
2.存储式XSS
也称为永久性XSS,危害更大
攻击将攻击脚本上传到WEB服务器上,使得所有访问该页面的用户都面临信息泄露的可能,其中也包括了WEB服务器的管理员
存储式XSS多发生在最终显示给其他用户的位置包含:
3.基于DOM的XSS
反射式XSS攻击和存储式XSS攻击都是通过服务器端提取用户提交的数据
并且以不安全的方式将其返回给用户
基于DOM的攻击仅仅通过JavaScript的方式进行
也就是说这种攻击经常发生在应用程序每次返回相同的静态html,而通过客户端JavaScript动态生成信息,并不会跟服务器端交互获取的时候
会话令牌:
XSS攻击最普遍的方式
截取一名受害者的会话令牌,劫持他的会话,进而作为受害者的身份来使用应用程序,执行任意操作并占有该用户的账户
虚拟置换:
这种攻击需要在一个WEB应用程序页面注入恶意数据,从而向应用程序的用户传送误导性信息
包括简单的向网站注入html,或者使用脚本注入精心设计的内容
注入木马:
这种攻击造成的后果远比虚拟置换严重,它在易受攻击的应用程序中注入实际运行的功能,旨在欺骗终端用户某种有害操作(如输入敏感数据等)
随后将它们传送给攻击者
在一个明显的攻击里,攻击者注入的功能向用户显示一个木马登录表单,要求它们他们向攻击者控制的服务器提交他们自己的证书
如果由技术熟练的攻击者实施,这种攻击还允许用户无缝登录到真正的应用程序,以便他们不会发觉访问过程中的任何反常情况
然后攻击者就可以自由使用受害者的证书实现自己的目的
这种类型的有效载荷非常适宜用于在钓鱼攻击中,向用户传送一个经过专门设计、连接可信应用程序的URL,并要求他们正常登录以访问这个URL
1.输入验证
2.输出编码
3.输出编码
应用程序之所以结合使用输入确认与输出净化,原因在于这种方法能够提供两层防御:如果其中一层被攻破,另一层还能提供一些保护
CSRF(Cross-site Request Forgery,跨站请求伪造,也被称为"one click attack"或者"session riding",通常缩写为CSRF或者XSRF,是一种对网站的恶意利用)
XSS利用站点内的信任用户(受害者),而CSRF通过伪装来自受信任用户的请求来利用受信任的网站
通过社会工程学的手段(如通过电子邮件发送一个链接),来蛊惑受害者进行一些敏感的操作,如修改密码、修改E-mail、转账等,而受害者还不知道他已经中招
CSRF的破坏力依赖于受害者的权限
如果受害者只是个普通的用户,则一个成功的CSRF攻击会危害用户的数据以及一些功能
入股受害者具有管理员权限,则一个成功的CSRF攻击甚至会威胁到整个网站的安全
与XSS攻击相比,CSRF攻击往往不太流行和难以防范
1.增加一些确认操作
2.重新认证
3.使用Token