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 动态占位(?)
- ... WHERE name LIKE '%#%%' ESCAPE '#'(适用于PostgreSQL/MySQL)
- 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程序员太自由散漫了!
- 自由重定向: http://example.jp/?continue=http://trap.abc.com/(说白了还是因为没有对外部输入进行校验)
- Cookie输出相关的安全隐患
- 不要把敏感信息存储在Cookie中,即使是加密过!
- p176 Padding Oracle攻击与MS10-070
- 发送邮件的问题(不太重要,略)
- 邮件头注入漏洞
- 使用hidden参数保存收件人信息
- MTA的开放转发
- 文件处理相关的问题
- 目录遍历(不要直接以路径指定服务器上的文件!不过PHP本身的机制确实容易导致这个问题)
- Options -Indexes ...
- 隐藏特定文件:<File "*.txt"> deny from all </Files>
- OS命令注入
- 目录遍历(不要直接以路径指定服务器上的文件!不过PHP本身的机制确实容易导致这个问题)
- 文件上传相关的问题
- 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个可能重合,导致字符串匹配问题
- ‘尾骶骨’测试,避免编码自动检测
- Shift_JIS(CP932)
作者:cteng 发表于2014-10-24 18:53:15 原文链接
阅读:46 评论:0 查看评论