Created
October 24, 2014 10:54
-
-
Save chenzx/52b09d4b1f0620160585 to your computer and use it in GitHub Desktop.
Web应用安全权威指南
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Web应用安全权威指南 | |
跳转至: 导航、 搜索 | |
p41 每次会话认证完成后更改下一次的会话ID | |
p44 Cookie Monster Bug:应该指定a.co.jp的却指定成co.jp | |
php.ini:session.cookie_httponly=on(JS不能访问Cookie) | |
不显示错误信息:display_errors=off | |
同源策略:外部网页JS无法访问iframe内部的内容 | |
XSS:将外部JS注入到iframe内部执行(不用iframe也可以) | |
XSS本质上是由于缺陷网站没有对用户输入做校验过滤导致的! | |
属性值用""括起来,并对< & "进行转义 | |
PHP htmlspecialchars | |
JS以外的跨域访问: | |
X-Frame-Options: Deny/SameOrigin; | |
img.src指定其他域名,请求图像时就会附带图像所在主机的Cookie(?靠) | |
script.src:A网站嵌入B的js,则发送到B的js在A网站中执行后可附带A的cookie,从而泄露给B | |
JSONP:不能用于传输隐私信息 | |
CSS:link元素/@import/JS addImport | |
form.action | |
CSRF:在用户不知情的情况下提交表单 | |
PHP mb_check_encoding, mb_convert_encoding | |
ereg --> preg/mb_ereg3 | |
二进制安全与空字节攻击(%00) | |
p88 XST:关闭TRACE方法: | |
httpd.conf:TraceEnable Off | |
p90 script元素中的JS字符串字面量:不能出现</tag>!(JS的语法解析不是图灵完全的!) | |
URL:允许http: https: //,禁止javascript: ? | |
p94 数据先按JS字符串字面量转义(\-->\\),再按HTML转义('-->') | |
script元素中无需进行HTML转义,但需要注意</script>问题(我觉得这是当前浏览器实现的缺陷) | |
p96 避免动态生成JS? | |
本质的困难:转义是基于正则字符串替换,而JS代码则是带有上下文结构的 | |
将字母数字以外的字符进行Unicode转义(\uXXXX形式)——虽然安全了,但数据传输量增加了~ | |
DOM based XSS(JS代码不会出现于服务器端生成的HTML中,而是在客户端浏览器上下文中执行) | |
博客系统/SNS:允许用户使用html标签和自定义CSS | |
需要能够解析HTML/CSS语法的完整解析器! | |
SQL注入 | |
... WHERE name LIKE '%#%%' ESCAPE '#'(适用于PostgreSQL/MySQL) | |
SQL LIKE查询最好还是换成外部独立的Lucene? | |
静态占位 vs 动态占位(?) | |
CSRF | |
原因:form.action可以指定任意URL;保存在Cookie中的会话ID会被自动发送(Referer字段不同!) | |
防御关键:确认请求是由用户发送的!(how?浏览器要实现“由用户意图的UI交互操作触发”比较困难) | |
嵌入安全Token(用POST,而不是直接GET) | |
让用户再次输入密码(这损害了可用性) | |
检查Referer | |
不完善的会话管理 | |
第三方获取会话ID:预测、窃取、劫持 | |
会话ID嵌入到URL的问题(Tomcat/JSP早期就是这么做的!):可能导致会话ID通过Referer泄露 | |
Web邮箱带有外链的邮件,诱使用户点击(现行手段:Web邮箱服务器端检测过滤,或者‘代为打开’) | |
将会话ID保存到Cookie?(禁用第三方Cookie,导致广告网站追踪用户) | |
会话固定攻击(如果会话是服务器端产生的,恶意攻击者如何预先得知这一信息呢?) | |
接受来源不明的会话ID是PHP的特性?(这个应该算PHP的漏洞吧) | |
=> 强制在用户登录时更换会话ID | |
重定向相关的安全隐患 | |
自由重定向:http://example.jp/?continue=http://trap.abc.com/ (说白了还是因为没有对外部输入进行校验) | |
外链警告页面 | |
HTTP消息头注入漏洞(基于外部输入产生消息响应头部???) | |
st,服务器端不要这么做不就行了,扯 | |
感觉漏洞都是因为那些PHP程序员太自由散漫了! | |
Cookie输出相关的安全隐患 | |
不要把敏感信息存储在Cookie中,即使是加密过! | |
p176 Padding Oracle攻击与MS10-070 | |
发送邮件的问题(不太重要,略) | |
邮件头注入漏洞 | |
使用hidden参数保存收件人信息 | |
MTA的开放转发 | |
文件处理相关的问题 | |
目录遍历(不要直接以路径指定服务器上的文件!不过PHP本身的机制确实容易导致这个问题) | |
Options -Indexes ... | |
隐藏特定文件:<File "*.txt"> deny from all </Files> | |
OS命令注入 | |
文件上传相关的问题 | |
DoS攻击 | |
使上传文件作为脚本执行 | |
诱使用户下载恶意文件(把js文件的MimeType设为html?或上传php/asp/jsp后缀的文件?) | |
图像文件中嵌入html/js代码?(这应该是IE的安全漏洞)正确设置Content-Type! | |
越权下载 | |
include相关的问题(这又是PHP本身的漏洞吧,略) | |
eval | |
共享资源 | |
竞争条件漏洞(这个有点高级~):不要使用共享变量(如Servlet成员变量) | |
典型安全功能 | |
隐藏邮件地址登录ID,显示公开昵称 | |
自动登录 | |
延长会话有效期 | |
使用Token(注意,可将用户的多个登录视为多个会话) | |
使用Ticket(SSO/OpenID?) | |
账号管理 | |
CAPTCHA | |
授权 | |
字符编码(这个部分的内容讲解很详细!!!) | |
Shift_JIS(CP932) | |
非法编码:只有前置字节没有后置,如0x81;后置字节不在正确范围内,如0x81 0x21 | |
EUC_JP:US-ASCII+2个字节的0xA1~0xFE | |
ISO-2022-JP:7比特+转义序列,不支持半角片假名? | |
UTF-16:一开始就是USC-2,但后来Unicode范围扩大,也支持BMP之外的字符 | |
代理对:预留0xD800~0xDBFF以及0xDC00~0xDFFF的区域,可表示2^20个字符 | |
UTF-8 | |
给定任意字节,立即知道是首字节还是后置字节,不会像Shift_JIS那样发生"5C"问题 | |
‘非最短形式’问题(引发服务器端可能不能正确过滤?但只要先字节流转到字符流码点,然后对字符做过滤就没问题) | |
安全检查的时候未能将0xC0 0xAF识别为0x2F,但后续处理又将它视为斜线 | |
RFC3629:将‘非最短形式’作为非法数据处理 | |
GB2312:略 | |
问题:第一个字节和第二个字节的范围是重叠的(因此不能随机地确定字符位置) | |
GBK | |
除去字节范围重叠外,第二个字节可能包含0x5C,导致PHP安全漏洞(addslashes) | |
=> 使用UTF-8 | |
GB18030 | |
不会导致5C问题;但前2个字节和后2个可能重合,导致字符串匹配问题 | |
‘尾骶骨’测试,避免编码自动检测 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment