同源:不同域 的客户端脚本 没授权 情况下,不能 读写对方 资源 | iframe http cookie(内存变本地)
区别:CSRF:借用,XSS盗用| CSRF蠕虫在攻击网站,XSS蠕虫在目标网站
xss:突破同源策略, 跨域(document.domain = ‘com’) 字符集(encodeURI) 注入点(html css js url) referer 屏幕劫持
csrf:获取唯一值(通过refe得到uid) 跨域获取数据(服务端代理 jsonhijack)
安全防御:浏览器 服务器 用户
数据种类:服务端(数据库 内存 文件 ) 客户端(cookie ) 传输中(json xml) 文本(html js css) 多媒体(flash mp3) 图片(pic)
浏览器:W3C
同源:不同域 的客户端脚本 没授权 情况下,不能 读写对方 资源 | iframe http cookie
1.协议-http https 域名a.com b.com 端口80 8080
2.js
3.ajax http响应头
4.refer只可读,document.cookie是可写的
5.http消息头,DOM树,浏览器存储
CSRF:借用,XSS盗用| CSRF蠕虫在攻击网站,XSS蠕虫在目标网站
iframe 第三方嵌入,同源策略不允许iframe进行资源读写,不同域要遵守同源,但iframe仍可对父页面进行写但是不能读的操作
跨站:javascript ==> 获取:隐私数据 cookie url
AJAX:它是遵守同源策略的,只是W3C新标准CORS允许跨域
http:无状态的请求响应(每次请求响应都会立即和延时断开),通过session cookie保持会话状态
请求头:用户信息
GET http://www.baidu.com HTTP/1.1
Host:www.baidu.com
User-Agent: 操作系统 浏览器
Refer:from where
+cookie key val path domain httpOnly secure
响应头:服务端信息
HTTP/1.1 200 ok
Server:Apache/2.2.8 (win 32) PHP/5.2.6
Content-Length :3635
Content-Type:text/html;charset=utf-8
COOKIE:域 路径 httponly https local p3p limit ==>详细如下:
域
路径
httponly(通过cookie超过长度限制报错)
secure(https)
本地与内存cookie(内存加生存时间,使其变成本地cookie)
p3p:跨域访问cookie,用户信息同步,ucenter的单点就是这么个原理
limit:每个域有50个cookie,不同浏览器能存的个数有限制,最值是4kb,删cookie设过期值为过去时间即可,cookie无法跨浏览器存在的,flashcookie能跨浏览器存在
CSS:样式伪装,通过伪类,猜测input表单项的值,其实是伪装后让用户点击,引诱用户做出他以为是但实际不是的操作,包括:通过界面伪装交互,javascript伪造请求和劫持数据,以及iframe配合src跳转等来实现的
xss:突破同源策略, 跨域 字符集 注入点 referer 屏幕劫持
xssprobe:browser User-Agent lang referee location top location Cookie domain title screen flash
xss类型:反射型 存储型 (这两种是server端交互的)和DOM型(是直接document.write...)
常用于挂马 盗取用户cookie Dos 钓鱼 非法操作 劫持web行为 DDos攻击 web2.0蠕虫 挂马攻击 刷广告和流量
xss挖掘:是否存在,能否执行
+跨域
XSS Filter,同域和 X-XSS-Protection
跨子域:document.domain = ‘com’ //任意跨了,不受同源策略影响
大规模XSS:批量发送友链请求,诱导管理员点击,获取cookie,xssprobe添加账号等
+字符集:字符 字节 字符集 字符编码 | 宽字节 gbk 吃ASCII字符
javascript:char.toString 字符进制
编码解码:encodeURI encodeURIComponent /de+
+注入空间(html:标签间 标签内(src/href/action on* style 属性引用) css值 javascript代码值)
HTML注入:标签 属性 文本 注释 javascript事件 资源链接 data对象
CSS注入:资源类型的图文本,比如图片
Javascript注入:json(callack content-type) + 代码混淆
Url:不同进制链接,参考checklist
目标输出:跳转页面 原页面 http响应(last-modified Etag)
DOM:浏览器自解码(进制码 实体编码) | 标签 属性闭合
+referer 是公开的,如果存在身份证或其他隐私信息就会泄露的
浏览器明文密码,等待浏览器密码填充后抓取,也是时间竞争
+屏幕劫持:点击劫持(透明层+iframe) 拖放劫持(是不受同源策略限制的) 触屏劫持
界面:iframe嵌入 javascript 跨站 http响应头
csrf:伪造请求(如果请求的发出不是用户的意愿):盗取和篡改目标数据 跨域+信息
+跨域 跨域发出一个get or post 请求(html标签发起的跨域是允许的,不在同源策略之中) ,
可以无javascript参与,
+信息 请求是身份认证后的(请求来源除了refer不同,其余的相同,而且带着cookie,需要注意的是IE是不允许带着本地cookie跨域的,但是加了P3P协议就行,这个响应头告诉浏览器允许非法请求的网站跨域请求目标网站的时候带上目标网站的cookie)
csrf类型:html(src 跳转了) json(一个是请求api带上目标站的cookie,同时执行本地的js劫持函数,) flash
csrf:表单token 验证码 refer 跨域 jsoncallback
url:path+query
CSRF:SQL注入 命令执行 XSS攻击
浏览器劫持on事件
蠕虫:首先是用户登陆了,之后带上cookie信息
漏洞:浏览器差异 浏览器bug 字符集问题 漏洞对象 所在场景
xss蠕虫:目标网站存在xss漏洞,用户查看xss蠕虫代码时,蠕虫触发并开始传播,包括:DoS是对目标网站(用户注销 劫持页面 设置大cookie 弹窗 javascript特效) DDos是对其他网站
xss是代码是在注入目标网站的,csrf代码是在攻击网站的
csrf:获取唯一值(通过refe得到uid) 跨域获取数据(服务端代理 jsonhijack)
clickHiJack:HTTP GET提交请求和页面被<iframe>标签包含
安全防御:浏览器 服务器 用户
browser:HTTP:X-Frame-Options X-XSS-Protection X-Content-Security-Policy
server:域分离 https传cooie 验证码 小心第三方(<script> <iframe> <object>)
xss:OWASP(html标签 属性 javascript css url)
csrf:http refer是否同域 session cookie生命周期 验证码 一次性token +临时cookie(客户端生成,javascript生成 网络连接失败需要再提交一回)
界面劫持:X-Frame-Option Frame-Busting token
user:noscript插件 最小信任(邪恶双胞胎) 忠告:不要泄露个人信息
php安全:
1、预防session定制:重新生成sessionid
session_regenerate_id();
$_SESSION['logged_in']=true;
2、防止表单提交骗术:向表单添加一次性记号,并保存在用户session中
session_start();
$_SESSION['token']=md5(uniqid(mt_rand(),true));
<input type="hidden" value="<?echo $_SESSION['token']?>">
if ($_POST['token']!=$_SESSION['token']||!isset($_SESSION['token'])){
//提示用户输入密码
}
3、确保过滤输入,如 ctype_alpha($_POST['name']) //允许输入字母
4、避免跨站点脚本:通过htmlentities对所有html输出进行转义,并保证指明正确的字符编码
header('Content-Type:text/html;charset=UTF-8');//使用正确的字符编码
$html=array();
$html['username']=htmlentities($clean['username'],ENT_QUOTES,'utf-8');
echo "{$html['username']}";
5、避免sql注入:pdo转义
6、将密码置于站点文件外部,如配置文件中,存储密码时可加常量,找回密码也是一样
7、使用散列码验证数据,即将表单内容加密后传输
8、暴力破解:严格控制输入次数
9、伪造跨站请求,即表单唯一,见上
10、session劫持和固定:只允许通过cookie来传递sessionID,同时生成一个由URL传递的额外SESSION记号,并频繁生成新sessionID
ini_set('session.use_only_cookies',true);
session_start();