《HTTP图解》读书笔记及总结javascript
从总体上看,HTTP就是一个通用的单纯协议机制,具有较多优点,但在安全性方面则呈劣势。好比如今Web网站都会使用的会话管理(session),加密处理等安全性的功能,HTTP协议内并不具有,须要开发者自行设计并实现。java
经过URL查询字段或表单,HTTP首部,Cookie等途径把攻击代码传入。程序员
攻击者经过直接访问Web应用,把攻击代码传入,主要来攻击服务器上的资源。常见的攻击是SQL注入和OS命令注入攻击。数据库
被动攻击是利用圈套策略执行攻击代码的攻击模式,攻击者不直接对目标Web应用发起攻击(借刀杀人),主要攻击用户的资源和权限。
一般的攻击模式以下:后端
在Web页面或邮件内设置陷阱浏览器
陷阱诱导安全
用户的浏览器触发事先已设好陷阱的HTTP请求服务器
用户的浏览器运行攻击代码session
执行攻击代码的后果是用户所持的Cookie等被窃取、用户权限遭到恶意滥用网站
被动攻击模式中具备表明性的攻击是跨站脚本攻击(XSS)和夸站点请求伪造(CSRF)
安全对策大体可分为:
客户端的验证
javascript验证只是为了尽早地识别输入错误,起到提升UI体验的做用。但请求仍然能够篡改,不能彻底依赖客户端的验证。
服务器端的验证:输入值验证、输出值转义
从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出值作转义是很重要的安全策略。转义不彻底时,会因触发攻击者传入的攻击代码,而带来一些危害。
跨站脚本攻击(Cross-Site Scripting, XSS)是在浏览器内运行非法的HTML标签或JS脚本进行的一种攻击。动态建立的HTML部分有可能隐藏着安全漏洞。
攻击案例:
动态生成HTML处发生,表单中填写HTML甚至JS脚本
浏览器地址栏,Chrome和FireFox如今能够对这种URL进行转义,避免被攻击
http://example.com/login?ID="><script>var ..</script>"
对用户Cookie进行窃取
恶意构造的脚本一样能以跨站脚本攻击的方式,窃取到用户的Cookie信息。
若是响应信息中Cookie设置成HttpOnly,脚本就没法取到
如今后端程序员不多用字符串拼接吧,作个了解
//SQL语句 SELECT * FROM party WHERE userName = //传过来是这样的字符串 'xx' OR 1 = 1 //拼接后,就能够把全部的用户查找出来 SELECT * FROM party WHERE userName = 'xx' OR 1 = 1
有时服务端会把外部就收到的数据赋给首部字段Location和Set-Cookie或者其余字段,攻击者即可以在响应首部字段内插入换行,添加任意响应或主体的一种攻击。
强制浏览
对那些不肯公开的文件,为了保证安全会隐藏其URL,可一旦知道了URL,也就意味着能够浏览URL对应的文件。直接显示容易推测的文件名或文件目录索引是,经过某些方法可能会使URL产生泄露。
不正确的错误消息处理
Web应用没必要在用户浏览画面上展示详细的错误消息,对攻击者来讲,详细的错误消息有可能给他们下一次攻击以提示。
开放重定向
开放重定向(Open Redirect)是一种对置顶的任意URL做重定向跳转的功能。若是重定向的URL到某个具备恶意的Web网站,那么用户就回被诱导到那个Web网站。
攻击者经过某种手段拿到了用户的会话ID,并不是法使用此会话ID假装成用户,达到攻击的目的。
获取会话ID的途径:
经过非正规的生成方法推测会话ID
经过窃听或XSS攻击盗取会话ID
经过会话固定攻击强行获取会话ID
访问登陆页面
服务器发布一个会话ID,如http://example.com?SID=12k2snsjn
将第2步中的URL做为陷阱,诱导用户A前去认证
用户A认证后,会话ID变味(用户A已认证)状态
以后攻击者再用第2步中的URL访问,假装成功欢迎用户A
攻击者经过设置好的陷阱,强制对已完成认证的用户进行非预期的我的信息或设定信息等某些状态更新,属于被动攻击。
攻击案例:
攻击者在留言板上发表恶意代码的评论<img src="http://example.com/msg?q=你好">
用户A登陆,查看留言板
触发陷阱,用户A中浏览器的Cookie持有已认证的会话ID,利用用户A的权限执行发表动做
HTTP在安全方面有如下缺点:
通讯使用明文(不加密),内容可能会被窃听
不验证通讯方的身份,所以有可能遭遇假装
没法证实报文的完整性,有可能已遭篡改
HTTPS就是在HTTP上再加入加密处理和认证等机制。
为何不一直使用HTTPS?
加密通讯会消耗更多的CPU及内存资源。若是每次通讯都加密,会消耗更多的资源,平摊到一台计算机上,可以处理的请求数量也会随之减小
节约购买证书的开销
所以,若是是非敏感信息则使用HTTP通讯,只有在包含我的信息等敏感数据时才使用HTTPS加密通讯。