Skip to content

Instantly share code, notes, and snippets.

@chenzx
Created October 24, 2014 10:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chenzx/52b09d4b1f0620160585 to your computer and use it in GitHub Desktop.
Save chenzx/52b09d4b1f0620160585 to your computer and use it in GitHub Desktop.
Web应用安全权威指南
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转义('-->&#39;)
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