web前端黑客技术揭秘-读书笔记[working]

iframe

很多网站会通过iframe来引入第三方内容比如广告,第三方web游戏和应用.

约定网页是父页而iframe中的是子页. 如果父页和子页同源,那么可以通过contentWindow来操作彼此的DOM树, 否则同源策略会禁止双方对彼此的资源读写. 但是子页还是可以对父页的location值进行写操作,这样可以让父页重定向到其他网页 但是对location是没有读权限的, 因为有些隐私信息会存在父页的url中, 这样做可以避免隐私泄露.

请求头响应头和javascript

不是任何请求头都可以通过javascript来设置.同时, 不是所有响应头都是可以被客户端脚本读取的, 其中就有设置了HttpOnly的Set-Cookie/Set-Cookie2, 这是严禁客户端脚本读取的.

在apache的历史版本里面,http请求长度超过LimitRequestFieldSize长度的时候, 服务器返回400错误并在返回消息中将出错的请求头内容输出, 其中就包括了httponly cookie

Ajax

Ajax是严格遵循同源策略的, 既不能从另一个域读取数据也不能向他发送数据. 但是有一种场合除外, www.foo.comwww.evil.com 发送数据的时候带上请求头Origin: http://www.foo.com . 同时目标域来判断这个域名是否在白名单中,如果是就返回响应头Access-Control-Allow-Origin: http://www.foo.com 表示同意跨域. 如果值是通配符*, 表示任何域都可以发送数据过来.

如果不返回响应头, 浏览器就会报权限错误.然而, 实际上数据已经被目标域给接受了.但是这样的跨域无法带上会话信息, 除非设置withCreadentials属性为true.

post

一般的content-type为application/x-www-form-urlencoded, 如果是上传文件就一般为 multipart/form-data

利用E4X来混淆javascript代码

将javascript代码放入xml数据中 比如x=<>alert(‘htllo’)</>, 但是这样子不能自执行, 需要eval(x).要达到自我执行, 就这样写x=<>{alert(‘hello’)}</>, 表示里面是要执行的脚本.