背景:我想从一台远程机器上的一个用户上的文件拷贝到我的机器上来,可我不想用root拷贝,想新增加一个用户来拷贝,如何实现无 Permission denied,拷贝过来呢?
现象:权限不够,(如下:test这个目录是我加的一个test用户生成的)
/home/test/rpmbuild/RPMS/x86_64 这个我想scp下面的rpm包,我不是root,怎么样能实现拷贝?
[root@localhost x86_64]# scp rpm@192.168.101.***:/home/test/rpmbuild/RPMS/x86_64/mysql-5.7.12-160420134244.el6.x86_64.rpm /data/www/yum/centos/6/x86_64
rpm@192.168.101.227's password:    Permission denied
问题:test是我建立的一个test用户。假如test用户的密码我忘记了(我用root修改了下test的密码,再用test用户拷贝没有问题,正常),但我有root。
试图:我还是想用rpm这个专有用户来拷贝。
权限:
[root@localhost ~]# ls -l /home/ |grep test
drwx------. 3 test          test          4096 Mar 18 19:18 test
rpm用户进不了这个目录
办法: rpm的用户组改成 test
id test
uid=539(test) gid=539(test) groups=539(test)
xiangjiwu - IEG(33757)  17:11:42
usermod -G test,rpm rpm

rpm的用户组改成 test,实践如下:
[root@localhost x86_64]# id test
uid=539(test) gid=539(test) groups=539(test)
[root@localhost x86_64]# usermod -G test,rpm rpm
[root@localhost x86_64]# id rpm
uid=540(rpm) gid=540(rpm) groups=540(rpm),539(test)
不做下面的权限,也是一样会报权限错误的: Permission denied
chown -R test:rpm /home/test  //给test目录递归上rpm组,下面这一步也不可缺少。
chmod -R 750 /home/test   //用户7,属组5(4+1),读取+执行。
修改后权限如下:
[root@localhost x86_64]# ls -l /home/ |grep test
drwxr-x---. 3 test          rpm           4096 Mar 18 19:18 test

再拷贝,也就成功了:


总结:三个步骤实现,一个不能少,一个是入组,一个是给目录加上组的可读权限:


最后,感谢PHPers@南极里的xiangjiwu - IEG兄弟,Thanks~

斧正:
xiangjiwu - IEG(337**)  17:41:32
rpm用户加到test组了, 那 /home/test就不用改组,直接chmod -R 750 /home/test 就行了。
背景:像unix或linux下的mysql和php-fpm都有一个xxx.sock文件,它是干嘛的呢?可以研究一下它。
  管道由于只能实现具有亲缘进程的进程间通信,使用受到了很大的限制,命名管道解决了这一问题。但是,无论是管道还是命名管道,都只能实现单向通信(在只创建一个管道的情况下)。
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。这里所指的使用套接字实现进程间通信,是由将通信域指定为PF_UNIX来实现的。该函数的形式如下:
int socket(int domain, int type, int protocol);
socket函数中的domain参数用于指定通信域,domain参数取PF_UNIX时,表示创建UNIX域的套接字。使用PF_UNIX域的套接字可以实现同一机器上的不同进程间的通信。
调用bind函数实现了套接字与地址(这里是文件名)的绑定。bind函数的具体信息如下:
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
其参数my_addr为指向结构体sockaddr_un的指针,该结构体的定义如下:
    #define UNIX_PATH_MAX 108
    struct sockaddr_un {
    sa_family_t     sun_family;     /*PF_UNIX或AF_UNIX */
    char    sun_path[UNIX_PATH_MAX];        /* 路径名 */
    };
在该结构体中,sun_family为AF_UNIX。sun_path是套接字在文件系统中的路径名。
Unix域套接字是通过套接字API实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的IPC机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示Unix域地址的套接字文件能够使用stat()但是不能通过open()打开,而且应该使用套接字API对它进行操作。
Unix域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使Unix域套接字能够比命名管道更好的适应IPC任务。

server.c


send.c


gcc server.c -o server
gcc send.c -o send

[root@iZ25dcp92ckZ sock]# ./server
Bind is ok
有client启动后server响应如下:
Recv: Counter is 1
Recv: Counter is 2
Recv: Counter is 3
Recv: Counter is 4

[root@iZ25dcp92ckZ sock]# ./send
Send: Counter is 1
Send: Counter is 2
Send: Counter is 3
Send: Counter is 4

最后,还发现那个设备文件server.sock 不能直接cat去读取,只能stat:
[root@iZ25dcp92ckZ sock]# cat server.sock
cat: server.sock: 没有那个设备或地址
[root@iZ25dcp92ckZ sock]# stat server.sock    
  文件:"server.sock"
  大小:0               块:0          IO 块:4096   套接字
设备:ca01h/51713d      Inode:16282       硬链接:1
权限:(0755/srwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2016-04-18 14:11:20.878641353 +0800
最近更改:2016-04-18 14:11:20.878641353 +0800
最近改动:2016-04-18 14:11:20.878641353 +0800
创建时间:-
实践摘录自:http://www.cnblogs.com/hnrainll/archive/2011/12/03/2274973.html
在参加腾讯实习生2016面试时,有两道问题自己没有想清楚也思考的不是很明白,面试结束时后悔没有问正解是什么,回来后在搜索引擎上也没有搜到相关的问题。

第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"

第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"

所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!


知乎网友洋耗子答曰:

因为这些都是假设性问题,所以一般都只能说排查问题的思路:

问题一:

1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。

2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。

3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。

4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。

5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。

6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。

问题二:

1:这类bug,一般都涉及越界操作。

2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。

3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。

朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
背景:在打php7.0.2下的apcu扩展包时,出现 Installed (but unpackaged) file(s) found,这块是因为它不光生成了.so外,还有一些涉及到.h的头文件在里面,可用于c开发,而我们只运行PHP不做开发,也就没有必要打进去,如果有必要则把它的文件及目录全路径写进%files里去,这儿我们就直接在install里删除掉这个目录下的所有文件及可,两种方法任取一个吧,都有实践且成功生成rpm无错误提示,如下。

方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。                                                                                            
/usr/local/php/include/php/ext/igbinary/igbinary.h

生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h

假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:


再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so


方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):




也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm      
/usr/local/php/ext/apcu.so

======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:


阅读全文
背景:在网上找一个开要自启动的shell代码放上去后,直接添加服务提示service redis does not support chkconfig,后加上下面两行O了。

加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off


阅读全文
因为老是出现好像刚连接时出现行数没有对齐,得ctrl+l一下才能修改到正确的地方,估计是和字体有关系,此次再次实践注意一下:
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================

经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
   今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
   设置方法
   当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
   isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
  1> sp_helpdb
  2> go
     呵呵.是不是很漂亮了,再也不会混乱了..

来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
༒࿈背༙྇景༙྇:༒࿈这༙྇个༙྇༒࿈还༙྇是༙྇༒࿈0༙྇༒࿈9༙྇༒࿈年༙྇༒࿈开༙྇始༙྇༒࿈兴༙྇起༙྇,༒࿈现༙྇在༙྇༒࿈火༙྇起༙྇来༙྇༒࿈了༙྇。࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒

GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)

1.在本机上安装openssh

在linux client上安装ssh服务,如果是windows的安装git for windows

sudo apt-get install openssh-server

可以查看ssh服务是否开启

ps -e | grep ssh

2.在server上创建一个git用户

sudo adduser git

3.在server上安装git

sudo apt-get install git-core

4.在server上初始化仓库

cd /home/git/

git init --bare myRep.git

5.通过git clone命令进行克隆远程仓库

git clone git@{your server ip}:/home/git/myRep.git

这里都必须知道server上git用户的登入密码。
背景:经常看到PHP的一些扩展均是以tgz后续提供的,那这个包是怎么打出来的呢?
         linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
tar xzf xlswriter-1.3.6.tgz  ??old five
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName

php-5.5.34/ext










cp zip-1.13.2forphp-5.5.34.spec  zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec  openssl-5.5.34forphp-5.5.34.spec  
cp zip-1.13.2forphp-5.5.34.spec  opcache-5.5.34forphp-5.5.34.spec  

挪动一下spec命令更规范:











RPM包重新命名:



spec文件里的Name:    php-5.5.34-extension-apc  替换成:apc-php55-


cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:


这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec

一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。

http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
rc?.d中的?代表不同的运行级别,例如进入图形模式的运行级别是5,就是说在rc5.d中的S开头进程都会运行,网络多用户文本模式的运行级别是3,就是运行所有rc3.d中S开头的进程。
单用户模式就是rc1.d,如果是rc0.d就是关机,其中没有S开头的,都是K开头的进程名字,代表杀掉进程。

更多参考:http://blog.itpub.net/12798004/viewspace-1143979/
[调侃苹果]Swift语言是一门仅仅次于PHP这门最好语言,没有这一的老二语言,弥补PHP的不足。当然Swift也确实可以去做Ios开发。。
背景:Swift是静态语言?听说这门子语言linux也默认安装支持啦啊,开源中国要用Swift重写整个网站了。Swift静态语言 + PHP动态语言,绝妙的组合。当然了。Swift性能很强的。
定位:Swift是静态语言,和Rust定位差不多的。系统级语言?胡说,无稽之谈,操作系统层面完全可以替换C,Swift可以直接导入C库,它还很胶水,能打能退,边打边跑,性格倔强。
概论:可以取代C来写一些底层软件,c写程序效率有点慢,不管怎么说,swift只是一门语言,作者的另外一个作品是LLVM,Swift的性能差不多是 C的50%左右,内存模型和C几乎一致。有人问swift 能搞底层吗?!完全可以。
比肩语言:GO语言个人觉得意义不大,标榜自己是系统级语言,实际上是个应用层语言,和PHP来抢市场。之前说 GO是替代C语言的 现在 swift又是替代GO的,swift 跟Go都是偏应用层,swift的作者年轻而go的作者有点老。
极客语言:Golang的语法也确实不是特别友好,比较Geek,Go语言的作者是以前Plan9那帮人搞的,go作者是超级大师级,大师毕竟是少数,人人不可能成大湿。
回归本质:c 是内功, 其他都是招式。C语言最朴实。随便拿个C的开源项目过来,只要你有C的功底都能改改。继续做二次开发。其他的语言,像PHP,Java,Go,C++ 你不花点时间研究下这个项目,完全上不了手。

结论,学不过来了 还是好好 学 PHP把 PHP才是世界最好的语言, PHP就你们这群老家伙在玩 新人也不少,不玩PHP玩什么,能赚钱就行 管他什么语言.


学习PHP之余,学下这门swift吧:
http://letsswift.com/2014/06/basic-operators/
http://letsswift.com/category/swiftguide/language-guide/page/3/
背景:现在流行nginx,于是安装一个监控可能没有必要,但是机器多可能还是有必要装一个agent之类的,这种小工具一般有个三五台服务器可以用用,大型的还得自己搞一套体系才行。

场景

想查看Nginx的实时状态信息,如哪些请求最频繁、哪些IP访问次数多 ……

例如服务器出现带宽持续很高,就需要看下现在哪些请求的流量大

ngxtop

ngxtop就是用来满足这些实时监控需求的,是个非常小巧实用的工具

ngxtop通过分析nginx的访问日志,使用类似top命令的界面实时展示出来

需要注意的是,ngxtop是查看实时状态信息,就是在执行ngxtop命令之后的统计信息,和top一样,不要理解为是对所有日志内容的统计

基本用法

$ ngxtop

结果形式如下

显示大图


实用案例

查看404状态的请求

$ ngxtop top request_path --filter 'status == 404'

查看响应流量最高的请求

$ ngxtop --order-by 'avg(bytes_sent) * count'

查看访问量最大的IP

$ ngxtop --group-by remote_addr

查看状态为4xx或者5xx的请求,同时显示status和http_referer信息

$ ngxtop -i 'status >= 400' print request status http_referer

查看以某字符串开头的请求

ngxtop --filter 'request_path.startswith("/wp")'

参数说明

-l: 指定日志文件的完整路径,默认情况下会读取nginx.conf里指定的访问日志路径

-f: 日志格式

-t : 更新频率,默认2秒

-g: 根据变量 group by,默认变量是 request_path

-o: 根据变量 order by,默认变量是 count

-h: help,详细的命令参数说明和使用方法,可以用这个参数查看帮助

内置变量

可以对以下内置变量进行操作,例如上面案例中的'status >= 400'

bodybytessend

http_referer

httpuseragent

remote_addr

remote_user

request

status

time_local

安装

ngxtop的安装需要依赖库 pip

然后使用pip安装 ngxtop

$ sudo pip install ngxtop
首先让我们来回忆一下历史久远的手动记录日志功能:“文件”——“会话日志”,选择日志文件的存放位置并拟定文件名,点击保存。
自动记录日志功能:
1.       选择“选项”——“全局选项”,打开全局选项,在常规设置中找到“默认会话”设置项,点击右侧的“编辑默认设置”:
英文版下:选择“Options”——“Global Options”,打开全局选项,在常规设置中找到“default session”设置项,点击右侧的“edit default settings”:
2.       上一步骤操作后,打开如下图所示的界面,选择“日志文件”(英文版下选择“Log file”),如下图所示,让我们分别解释一下右侧四个红色方框部分。

http://jingyan.baidu.com/article/335530da88aa0b19cb41c3b9.html
一、显示桌面由F11修改为option+D的步骤如下所示:
F11相当于windows中的“显示桌面”:
fn + F11 显示桌面。或用手指在触摸板上伸开也成。

F11修改为:option+d,如下所示:
1、打开“系统偏好设置”

2、找到“键盘”并打开

3、在顶部,我们选择“快捷键”按钮

4、然后在页面的左侧我们可以看到“mission control”,中文显示:调度中心。

5、点击之后就可以看到右边的“显示桌面”勾选即可,然后可在后面设置快捷键由F11修改为:option+d。
备注:为何不用command+d呢?因为在chrome中command+d是收藏夹,会导致冲突,在用chrome时无法打开桌面。


二、
macbook打开文件不用enter键:
command+down方向键下,就可以了
enter键对着文件怼就是逼迫文件改名字~
macbook下的tree加上中文显示不乱码加-N :tree -N -L 2 .
-N     Print non-printable characters as is instead of as escaped octal numbers.
         打印不可打印的字符,而不是AS ESCAPATED八进制数字。


背景:有时查看目录结构,这个tree非常有用,yum -y install tree安装就能使用。
tree  -L 2 -ugpshC
parameter explain:
-u   Print the username, or UID # if no username is available, of the file.
-g    Print the group name, or GID # if no group name is available, of the file.
-h    option rounds to the nearest whole number unlike the ls implementation  of  -h  which
       rounds  up always.
-f     Print the full path prefix for each file.
-p    Print the protections for each file.

tree -f ~+        #只显示目录和文件的绝对路径,注意加上这个: ~+。
tree -pf ~+      #显示目录和文件的绝对路径以及Chmod的权限,注意加上这个: ~+。
tree -pugf ~+  #显示目录和文件的绝对路径以及Chmod的权限,注意加上这个: ~+,u用户,g群组。
==============================================================

FreebsD:  Have you tried installing tree with:  pkg install tree ,cd /usr/ports/sysutils/tree make install  
来自:https://www.reddit.com/r/freebsd/comments/4kxyx1/newbie_having_trouble_using_tree_command/

相关参数说明及常用参数说明:
要想目录和文件有颜色,或是用Tree看有颜色,得用那个SecureCRT做下配置:
Session Options->Terminal->Emulation->Terminal [Linux/Xterm] [V]ANSI Color @老武用的是Linux可以,我用的是Xterm也行,颜色可调一下即可。
常常加 -C,表示颜色,-L表示层级。 如:tree -C -L 2。
-C            Turn colorization on always.

阅读全文
背景:自己是https的,想调用别人的一些华东解锁验证码的一些js不是https的,于是被阻止了,怎么办?

    从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警告,记录 Mixed Active Content 请求。而从 Firefox 23 开始,浏览器会默认阻止 HTTPS 页面中可能影响网页安全的 HTTP 请求(即阻止 Mixed Active Content)。这样做会牺牲一些网站的兼容性,但对安全性的提高是很有帮助的。

获取 Mixed Content 相当于发起部分加密的连接,其中未加密的部分存在被中间人攻击的可能。不同类型的 Mixed Content 所产生的危害程度也有所不同,Mixed Passive Content 可能会使中间人获取到用户的设备信息,或让用户看到不正确的图片、音频等信息。而 Mixed Active Content 则可能导致用户的敏感数据被窃取,比如账号密码等。

解决问题

解决方案一 (一劳永逸)

避免在 HTTPS 页面中包含 HTTP 的内容。

解决方案二 (让 Firefox 暂时不阻止)

mixed_content_01

解决方案三 (配置本地 Firefox,让其不再阻止)

打开新标签页,在地址栏输入 about:config,进入配置页面。

mixed_content_02

为什么 Mixed Content Blocker 不是阻止所有的 HTTP 请求?

Mixed Content 可以分为两类:

Mixed Passive Content
Mixed Active Content
Mixed Passive Content (a.k.a. Mixed Display Content)

Mixed Passive Content 是在 HTTPS 页面中一些对安全性影响不大的 HTTP 内容,比如 Image、Audio、Video 等。即使这些内容被中间人篡改,所产生的影响也只是 —— 中间人得知了用户的浏览器信息 (through user-agent included by HTTP headers)、用户看到了一张不正确的图片,这些被篡改的内容无法修改 DOM 树,也无法执行。另外,Mixed Passive Content 在 Web 上普遍存在。因此 Firefox 默认不会阻止 Mixed Passive Content。

Mixed Active Content (a.k.a. Mixed Script Content)

Mixed Active Content 是在 HTTPS 页面中一些能够修改 DOM 树的 HTTP 内容,如 JavaScript、CSS、XMLHttpRequest、iFrame 等。这些 HTTP 内容被中间人修改以后,可能会影响原有 HTTPS 内容的安全性,导致敏感的用户数据被盗。因此 Firefox 会默认阻止 Mixed Active Content。

深入思考

为什么 Frame 应该是 Mixed Active Content?

Frame 之所以不能被分类为 Mixed Passive Content 主要有以下几个原因:
一个 frame 可以将外层可靠的 HTTPS 页面跳转到恶意盗取信息的仿造页面。
如果一个 HTTPS 页面嵌套着 HTTP frame,而这个 frame 包含表单用以输入用户信息,那么用户信息将会以 HTTP 方式传送,有被中间攻击者窃取的危险,而用户却毫不知情,还以为一切都在安全的 HTTPS 里。

如何判定 Mixed Content 是 Active 还是 Passive?

该 Mixed Content 是否会影响页面的 DOM 结构。(Yes -> Active, No -> Passive)

来自:http://www.ipeld.net/archives/8860.html
分页: 21/40 第一页 上页 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 下页 最后页 [ 显示模式: 摘要 | 列表 ]