Scripting能干什么(危害)javascript
分类html
url参数直接注入的方式攻击前端
存储到数据库后读取后攻击java
XSS攻击的注入点算法
<div> #{content} </div>
这种是经过往HTML标签之间插入script标签的方式进行逻辑操纵从而引发的攻击方式。 防护:能够经过转译标签标记进行防护。转义
<
成<
和>
成>
sql
<img src="#{image}"/> <img src="1" onerror="alert(1)"/>
如上代码,经过提早关闭元素属性的方式进行的XSS攻击。chrome
<script> var data = "#{data}"; var data = "hello"; alert(1);""; </script>
如上代码,经过在js代码中插入代码的方式进行的XSS攻击。 防护:能够经过转译标签标记进行防护。转义
\
或者转换成json(推荐)。数据库
黑名单进行过滤,就是用正则去匹配不合法的html标签,而后进行内容过滤,优势是开发简单,缺点是可能过滤不全存在隐患。 白名单进行过滤,就是规定全部容许的标签及属性的范围域,优势是内容过滤可靠,安全,但因为事先须要将内容构建成DOM树(推荐cheerio库),所以效率可能会有必定影响。(第三方过滤模块:js-xss)json
防护小结:后端
.set('X-XSS-Protection', 1)
,但这种策略防护有限。var escapeHtml = function (str) { if (!str) return ''; str = str.replace(/</g, '<'); str = str.replace(/>/g, '>'); return str; }; var escapeHtmlProperty = function (str) { if (!str) return ''; str = str.replace(/"/g, '&quto;'); str = str.replace(/'/g, '''); str = str.replace(/ /g,' '); return str; };
CSP(Content Security Policy)
child-src connect-src default-src --> <host-source> <scheme-source> 'self' font-src frame-src img-src --> 'unsafe-inline' 'unsafe-eval" 'none' manifest-src media-src object-src --> 'nonce-<base64-value>' <hash-source> script-src style-src worker-src 'strict-dynamic' 具体参见MDN上CSP的文档信息
XSS与CSRF的区别
CSRF攻击的原理
CSRF的危害
CSRF的防护
经过验证 referer 请求头是否来自可信任网站或本网站,从而禁止来自第三方网站的请求。
PS:referer 应该是referrer,这个单词是为数很少的单词错误。
cookie特征
以上特征对应chrome中的cookie的各类参数
cookie的做用
cookie - 登陆用户凭证管理(判断用户是不是在登陆态)
这种方案就是当用户登入成功以后在cookie中存储用户id,当用户在以后的请求中判断当前用户。可是这种方案容易被篡改用户I。
这种方案不只在cookie存储用户id,而且另外存储一个由服务端根据密钥和用户id生成的惟一用户签名。于这种签名都是不可逆的,当用户在以后的请求中都带上这两个信息,由服务端根据用户id从新生成签名并与请求带过来的签名作对比来判断用户是否合法。因为密钥只有服务端有,所以这种方法是安全的。
这种方案只在cookie中存储当前登入用户的惟一session,这种方案是安全的,所以想要作非法操做的用户只拿到sessionID是没有任何意义的。
点击劫持的特色
总结来讲,点击劫持就是在用户点击网站时,使得劫持者在用户在不知情的状况下引导用户作一些操做。其技术原理是在正常的网站上内嵌iframe框架,而且iframe框架的透明度为0,这样用户在点击页面的时候,由于是在点击看的见内容,实际上在点击看不见的iframe框架的内容,从而使掉进劫持者的trap。
点击劫持的防护
其原理在于当页面中有iframe框架时,top对象和window对象是不同的,从而top.location对象 window.location对象也是不同的,所以能够用下面代码来进行禁用。
if(top.location != window.location){ top.location = window.location; }
能够经过设置http response头的方式进行禁用,
X-FRAME-OPTIONS:DENY
。PS:这个头的其余选项参考官方文档。
好比加上验证码之类的防护措施。
传输链路窃听篡改 以下图
在上图浏览器和服务器之间全部的节点都有能力窃听篡改要转发的信息。
PS:在mac和Linux上能够经过命令traceroute
来追踪请求从发起到目标服务器通过了哪些中间服务器,好比DNS服务器,路由转发服务器等。
http窃听
http篡改
https进行加密传输。 PS:https使用的是TLS(SSL)加密。TSL是SSL的改进算法。
可是虽然是加密传输,中间服务器无法窃听数据,可是存在中间人却能够进行数据盗取,以下图:
这样,中间人能够伪造服务器,在用户和服务器之间进行信息交互,从而盗取用户信息。所以引入证书机制,证书必须由受信任的的机构(CA)签发。以下入过程:
本身往系统中添加证书是很危险的,由于签发此证书的CA并无被浏览器及其其余机构信任,也就是说此CA不受信任,若是你信任/本身添加了此证书到系统中后,若是此CA又给一个有问题的服务器签发证书后,这样信任这个机构签发证书的机器就有了能面临风险。
SUMMARY:https没有证书也能够正常使用,只是显示不安全。
如何启动https服务器: 申请证书 --> 配置https服务器
证实你是你!
指纹解锁,虹膜识别,人脸识别等
密码 - 泄漏渠道
若是一个网站的用户数据泄露,不少用户可能用同一个帐号密码去注册不一样的网站,这就叫撞库。
密码 - 存储
在存储密码的时候,只能由明文向密文变换,反之不能够。
这是防止用户密码设置的过于简单,在密码进行加密的时候在密码上再增长一串数字,使得加密后的密码更加安全。
哈希算法
当明文有一点变换的时候,密文不是改变一点,而是全盘变化。
hash算法是一种信息摘要算法,咱们无法经过一段信息摘要计算出原始明文。
通常hash算法的结果都是32位字符串
彩虹表破解哈希算法
因为哈希算法是不可逆的,所以网络上能够创建穷举数据库来破解哈希算法,而这种数据库叫作彩虹表。
因为单层哈希加密容易破解(容易被彩虹表穷举),所以能够采用多重哈希增大破解难度。
md5(明文)=密文 md5(md5(明文))=密文 md5(sh1(明文))=密文 md5(sh1(sh256(明文)))=密文
密码 - 变化次数越多越安全
增大密码传输的安全性
验证码策略限制用户每分钟只能登录几回,防止穷举破解。
首先前端加密并不能保证传输的安全性,窃听者拿到传输的密文后也能够模拟用户请求,从而进行进一步信息盗取,可是前端加密能够保证窃听者不能拿到明文,对撞库效应有必定安全保证,觉得每一个网站的加密算法是不同的。
生物特征密码
生物特征密码的安全性
指纹,人脸容易在照片中出现,容易泄露。
生物特征密码都是经过类似度匹配,并不能彻底保证两个很类似的人脸或其余生物特征不会出现碰撞。
因为咱们的生物特征通常都是惟一的,好比指纹,若是被泄漏,就没法更改。
值得一提的是,sql注入远远比看到的简单实例复杂的多,几乎均可以做为一门学科学习,而且其衍生分支不少。因此其危害是很大的。
一些神奇的 SQL 语法
检测服务器环境信息,从而根据环境信息来进行一些非法操做。
检查一个表有多少列。
用于猜解用户名密码,咱们知道,若是用户名密码特别复杂的状况下,进行穷举破解的成本会很是高,可是若是一位一位的破解的话,则会简单不少,上面的sql则提供了这种功能。
SQL 注入危害
SQL 注入防护
这个方法相似于XSS的黑名单和白名单过滤功能,可是基于sql注入的变种等因素,这种方法并不能很好的防治sql注入。因策功能有限。
这是sql注入最主要的防护手段,基于数据库提供的参数化查询的功能,其主要原理为:对于一条查询,先将预查询语句给到数据库,好比
select * from table where id=?
,以后再把所缺的参数给到数据库,这样全部注入内容都是简单的参数,也就没有注入执行的危害了。
通常ORM框架都会解决注入问题,不管用上面哪一种方法。
上传问题
上传问题防护
以上三种防护功能比较有限,而程序输出是指,当用户再次读取上传的文件的时候,服务器已二进制码的方式给用户,这样就算是可执行文件也无法执行了。
这种相似Linux下的目录下文件权限,只有读写权限,没有执行权限。
特征
信息泄露的途径
当系统报错的时候,因为没有控制好错误堆栈的打印控制,使得一些敏感信息在错误堆栈中暴露,如连接字符串等。
注意和垂直权限控制作区分,垂直权限指的是咱们熟悉的管理员/普通用户的区别。而水平权限控制则指的是同一权限的人在进行操做的时候可能出现的信息泄露问题。
社会工程学
其实对于互联网上“谁是我”这个话题,当愈来愈多的咱们方方面面的资料被别人掌握时,攻击者就约可能模拟“真我”去实施一些恶心行为或是盗取“真我”的一些有价值的东西。
利用oAuth思想防止资料泄露
当用户未受权的状况下谁也不容许读取资料,这样能更好的方式业务开发人员不当的操做也不轨的行为。由于业务开发人员大大高于用户资料服务的开发人员。
不容许批量获取资料能更有效的控制大量用户资料被盗的状况。
当若是真的有用户资料出现丢失的状况下,能够有效的进行过后追踪,肯定问题出现的缘由。
攻击者经过模拟用户的请求并大量去请求目标服务器使得服务器的负载很是大或者大量占用服务器的带宽,使得正经常使用户无法进行正常访问。而且若是当大量带宽被占用的时候,宽带提供商为了保证网络信道的通畅,只能将受攻击的服务器下线,所以受攻击的服务器无法为用户提供正常服务。 其攻击形式主要有:
- TCP半链接:就是在三次握手的时候,只是作一次请求连接操做,不作后续的对服务器的响应,致使服务器觉得有请求要真的连接它,形成服务器没必要要的等待从而进行的攻击。
- HTTP连接:这种就是模拟正常的请求链接进行大连服务请求的形式。
- DNS攻击,DNS服务器的负载能力每每比正常大型服务器低,当大量攻击请求致使DNS服务器无法为正经常使用户服务的时候,致使无法进行域名解析服务,也就形成DOS的真正攻击出现。
大规模分布式拒绝服务攻击DDOS
这种攻击是攻击者可能经过病毒的方式控制了别人的机器,所以攻击发起地点多是从不一样的地方进行攻击,每一个地点的攻击流量可能不大,可是总和却很巨大。这些被控制的机器就叫作“肉鸡”,还有可能经过代理服务器的方式进行攻击。
DOS攻击防护
购买云计算厂商的服务,让其做为代理,这样在遇到这种状况的时候,高防IP服务器会预先对请求进行流量清晰等防护操做,以后再将正常的请求分发给本身的服务器。
尽可能避免失败重试,形成恶性滚雪球事件的发生
这种就是在收到攻击的时候能及时的停掉有问题的服务,保证核心服务能正常运行。
经过CDN来减轻服务器的负载,将一部分负载转移到CDN上来完成
这种攻击就是当有有问题的请求被攻击者拿取到以后,从而进行重复这种请求的一种攻击。还有就是在消费、抽奖等活动中用户重复这种过程致使异常订单的出现等恶性结果。
重放攻击防护
一个请求只能发送一次,当第二次发送token尚未变化,则标记这次请求无效