

说到ajax,不能不提到跨域限制这个问题。与跨域紧密相连的是referer,如果referer相同,就不会触发跨域限制;反之则视为跨域。
但发生跨域时,能否请求到跨域资源,也分两种情况:
第一种:服务器端不检查referer,这时候是否受跨域限制,由浏览器管理。
这时是否触发跨域限制,全由浏览器自己判断。比如在网页上用img标签插入一张跨域的图片,浏览器是不会触发跨域限制的,可以正常加载图片。但用ajax获取的话,浏览器就会触发跨域限制,获取不了。
这时候就算跨域了,服务器也是允许浏览器去下载文件的,只是看浏览器自己愿不愿意。
第二种:服务器端会检查referer,不符合规则的就拒绝。
这时候浏览器就吃瘪了,用img标签来插入图片也不行,这也是通常的防盗链手段。
如果我们在请求头里设置合法的referer,就可以破解跨域限制,但目前运行在浏览器宿主环境内的JavaScript实现不了这个功能,需要交给后台程序来做。如果只为了破解referer就单独做个后台文件,比较麻烦。但是我们使用油猴脚本的话,就不用写后台文件了,比较省事。
油猴脚本管理器(Greasemonkey或Tampermonkey等)由于是浏览器的扩展程序,可以设置请求头,包括伪造referer。它们都封装了一个GM_xmlhttpRequest方法,可以在用户脚本(UserScript)里调用。
今天我进行了测试,确定是可行的。示例代码如下:
// ==UserScript== // @name test GM_xmlhttpRequest // @description test // @namespace https://greasyfork.org/ja/users/24052-granony // @author me // @version 0.1 // @include https://greasyfork.org/* // @grant GM_xmlhttpRequest // @connect i.pximg.net // @connect i1.pixiv.net // @connect i2.pixiv.net // @connect i3.pixiv.net // @connect i4.pixiv.net // @connect i5.pixiv.net // ==/UserScript== GM_xmlhttpRequest({ method: "GET", url: "https://i.pximg.net/img-original/img/2017/05/16/00/20/10/62921231_p0.png", headers: { referer: "https://www.pixiv.net/" }, overrideMimeType: "text/plain; charset=x-user-defined", onprogress: function(xhr) { console.log(xhr.lengthComputable + "," + xhr.loaded + "," + xhr.total); //xhr.lengthComputable:布尔值,是否可以获取到文件总长度 // xhr.loaded:已加载的字节数 // xhr.total:文件总字节数 }, onload: function(xhr) { var r = xhr.responseText, data = new Uint8Array(r.length), i = 0; while (i < r.length) { data[i] = r.charCodeAt(i); i++; } blob = new Blob([data], { type: "image/png" }); var blobURL = window.URL.createObjectURL(blob); var downA = document.querySelector("h1 a"); downA.href = blobURL; downA.setAttribute("download", "a.png"); downA.click(); window.URL.revokeObjectURL(blobURL); } })
上面代码的功能是下载一个跨域并且服务器设置了referer防盗链的文件,下载后将其转换为blob对象保存到本地。
首先要授予这个脚本调用GM_xmlhttpRequest的权限:
// @grant GM_xmlhttpRequest
但光这样还不够,还要在@connect里指定跨域获取文件时文件url里的域名。如果文件url的域名没有在@connect里指定,则GM_xmlhttpRequest会报错。
如果跨域文件没有设置referer防盗链,那么到这里就够了,跨域问题会被自动处理(。
但示例代码里的url有防盗链设置,而且比较奇葩,服务器要求的其实是个不同源的referer,同源的referer反而不行。这就需要我们在GM_xmlhttpRequest方法的headers参数里设置合法的referer了:
headers: { referer: "https://www.pixiv.net/" }
其实上面的代码里还有个挺纠结的地方,就是把接收的数据转换为blob对象的过程。
JavaScript原生的XMLHttpRequest对象和jQuery的ajax方法都可以设置把接收的数据自动转换为blob类型,如:
xhr.responseType="blob";
这样拿到的response直接就是blob对象,但这个办法油猴的GM_xmlhttpRequest里测试不行。我见到有的油猴脚本在GM_xmlhttpRequest里设置了:
responseType: "blob",
我试了也不行,不知道人家是怎么用的,反正我这里测试是不行……
后来我在github上找到了一个办法可以把接收的数据转换为blob对象,就是上面代码里用的,看着挺费劲。主要是做了三个工作:
1:请求前设置overrideMimeType;
2:onload之后用Uint8Array和charCodeAt将数据正确的转换为blob对象。
Uint8Array和charCodeAt和这俩我之前完全不认识,看到的时候一脸懵逼:
后来我深入了解了上面步骤的作用:
overrideMimeType告诉服务器需要返回无格式纯文本的mime-type,而不是image/jpeg、image/png等图像格式。
Uint8Array是创建一个指定长度的无符号数组,charCodeAt则用来把response逐字节转换为Unicode编码(response都是string)。
怪不得我之前简单粗暴把response放进数组里转换成的blob对象有问题,还是姿势太低。
其他参考资料:Greasemonkey wiki
使用GM_xmlhttpRequest设置referer获取文件
最近比特币病毒肆虐,想抵御此病毒,主要有两种思路:
之前的一篇文章《MS17-010补丁下载地址》走的是打补丁路线。能用windows update 更新补丁是坠吼滴,但windows update 经常检查半天,没任何反应。这时候可以借助360等工具打补丁。
如果不想走打补丁路线,可以用本文的思路,简单粗暴关闭445端口。
首先在cmd里检查445端口是否开启:
netstat -ano -p tcp | find "445" >nul 2>nul && echo 445端口已开启 || echo 445未开启
其实主要是netstat -ano -p tcp | find "445"这一句,如果开启了445端口可以获得445端口的那条结果,如果关闭了445端口则不返回任何结果。
如果需要关闭445端口,需要一到两个步骤。
步骤1:
开始-运行输入 regedit 进入注册表编辑器,确定后定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servi ces\NetBT\Parameters
新建名为“SMBDeviceEnabled”的DWORD值,并将其设置为 0。
也可以将以下文字用记事本保存成.reg文件,双击导入:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NetBT\Parameters] "SMBDeviceEnabled"=dword:00000000
改了注册表之后重启。
如果是XP,则这样就已经关闭了 445 端口。但如果是win7及以上的话,还需要用步骤2来关闭server服务。
步骤2:
开始-运行输入services.msc,进入服务管理控制台。
找到server服务,双击进入管理控制页面。把启动类型更改为“禁用”,服务状态更改为“停止”,最后点击应用即可。也需要重启。
关闭445端口的办法
最近比特币勒索病毒肆虐,该病毒通过windows系统的445端口的SMB服务的漏洞进行攻击,加密用户的文件并进行勒索,造成了巨大危害。但其实在今年3月份,微软就发布过MS17-010补丁安全更新,可以抵御此次的病毒攻击(虽然一开始微软没有给xp做这个补丁,但昨天也发布了xp版本的)。
在这个文章里可以看到每个系统的更新包(KB号):
找到符合你的操作系统的链接,点进去下载就ok了。
点击后其实是到 Microsoft Update catalog 网站搜索该更新的KB号,同一个KB号根据不同系统也会有多个结果,选择适合自己系统的那个就行了。
界面大致如下:
另外不同操作系统的该补丁的KB号可能不同,这是正常的。比如xp、 vista、 windows server 2008 是单独的补丁安装程序,但其他系统基本都是月度安全更新整合包,后者和前者的KB号是不同的。
其实国内主流运营商大都封禁了445端口,所以公网用户(教育网除外)一般不用太担心。但是所谓有备无患,更新一下也不错。
总里面整合了一堆补丁,希望不要遇到有依赖的……
ps:我在自己电脑上用lantern翻墙之后,检查更新和下载更新都巨快,但是在公司电脑上用lantern却没有丝毫效果,不懂为什么。
话说上面下载的win7补丁单独安装装不上,可以试试用360打补丁,或者直接关闭445端口。
另外网上最近说的360NSA武器库免疫工具我试了,是个坑爹货,必须装360安全卫士才能用,没装的话它会提醒你装,但你不装的话它就修复不了。
MS17-010补丁下载地址
默认情况下,在WampServer里建的网站在自己电脑上可以用127.0.0.1或是localhost访问,但是局域网其他设备是访问不了的。
如果有必要,可以编辑httpd.conf,在约278行的地方有如下代码(如果你之前没编辑过的话):
# onlineoffline tag - don't remove Require local
将其改为:
# onlineoffline tag - don't remove #Require local # Deny from all Require all granted Order Deny,Allow Allow from 127.0.0.1 Allow from 192.168.1.*
之后重启wampserver(apache),局域网内的其他设备就可以输入你电脑的内网ip来访问了。
ps:
192.168.1.*这个看自己情况改;
另外我看上面的设置是配置的默认站点目录(即默认情况下为127.0.0.1的那个目录),但我在127.0.0.*里建了好几个网站(参考《WampServer多站点配置办法》),也许可以设置成让指定ip的电脑访问指定网站。这个有需要的话再折腾下试试吧。
配置WampServer可以在局域网内访问
如果iis里的网站是静态页面并且默认首页名字是index.html,那么浏览首页时,浏览器地址栏里有可能会显示这个“index.html”,形如:
http://www.exmp.com/index.html
怎么去掉呢?打开该网站属性的“文档”选项卡,先把默认首页的“index.html”删掉,然后点确定保存。(一定要先保存)
保存之后再次打开文档选项卡,再手动添加一个“index.html”并置顶。
这样就ok了,浏览器的地址栏里就不会出现“index.html”了。不过如果之前有缓存,可能得清一下缓存。
原理:
iis“文档”选项卡内置/预设的这个“index.html”的类型是“继承”,我们后添加的“index.html”类型是“本地”。差别就在这里。
上面的操作中,如果删除内置的“index.html”后没有点确定保存,而是直接手动添加“index.html”,有可能导致iis认为这个条目没有变化,于是新添加的“index.html”就变得和内置的“index.html”一样了。
iis隐藏网址后面的“index.html”
今天公司新买了一个惠普一体机做办公电脑,预装win10系统,领导让我重装成win7系统。
以前我上学时折腾装系统的时候,win8还没出来。我模糊的知道,自从win8出来后,预装新windows系统的品牌机要重装成win7就要麻烦些。不过我之前没有试验过,所以这次正好实验一番。
这次我装了3次才成功,最后记录一点经验。
1.首先要到BIOS里,禁用安全启动(secure Boot),开启Legacy Support(传统启动)。
2.新品牌机通常是UEFI引导+GPT分区表。这个没什么要改的,可以直接装win7。不过为了保险起见,也可以做一些额外的工作。
2.1 在BIOS里确认引导模式为UEFI,而不是传统模式(Legacy)。也可以把传统模式禁用掉,只留UEFI。
2.2 确认分区是GPT分区(区别于MBR分区);另外如果是新机器不需要保留数据的话,最好删除所有分区,再重新分区成GPT格式。(推荐用DiskGenius做分区,它在创建GPT分区时会提醒你是否创建ESP分区和MSR分区,我们都勾选上)。
2.3 注意UEFI引导下只能安装64位系统。也就是说32位win7是装不了的。
3.由于新电脑普遍使用USB3.0接口(甚至所有USB接口都是3.0的),而win7没有自带USB3.0驱动,所以我们必须给win7部署USB3.0驱动。
我们可以使用已经集成了USB3.0驱动的系统镜像,像我在PE里使用NT安装器的话,也可以在安装前设置给系统安装USB3.0驱动。
以上工作做好基本就没问题了。
放个我安装时的设置界面:
GPT分区模式下的引导分区要设置成ESP分区。虽然ESP分区在资源管理器里不会显示不来,但是我们可以直接填入其在DiskGenius里的盘符。
左下角添加USB3.0驱动。我用的这个USB3.0驱动是从Intel的Windows7 USB3.0 Creator这个软件里复制出来的。话说我还不清楚windows系统的USB3.0驱动是不是会区分主板什么的,还是一个驱动通吃?
右边中部的三个状态灯分别检查分区表模式、系统引导状态、EFI引导分区(ESP分区)。其中第二项这个BOOTMGR PBR如果安装前是黄色的,代表没有系统引导。这个不要紧,一般装完系统之后就会变绿了。如有需要也可以修复下系统引导。
UEFI+GPT模式的win7可以用chew-wga来激活。
ps:我安装了三次才成功 _(:3」∠)_
第一次是禁用了secure Boot,但是没有格盘,结果PE里部署完镜像之后,重启一直显示HP的logo(这个一体机是惠普的)。
第二次我格了全盘之后,重新分区,部署系统,但没装USB3.0驱动。因为这个一体机是2个USB3.0接口,2个USB2.0接口,我寻思着等重启后我把鼠标键盘插在USB2.0的接口上就行了,所以没装USB3.0驱动。谁知重启后,倒是能进入win7的安装配置界面了,但是USB2.0的接口也用不了。
第三次我安装时选了USB3.0驱动,OK了。
给新一体机安装win7系统
本文由怪蜀黍的胖次屋 投稿发表。
使用浏览器缓存来下载网站在线视频的历史最早可以追溯到十年前,那时候各大网站才刚刚起步,协议规则的还处在摸索阶段,防盗链措施还没有健全,基本上随随便便一个小白就可以轻易下载。
随着经济的提升,电脑开始普及,借此,视频网站如同雨后春笋般涌现,网站间竞争逐渐开始升温,这使得通过缓存下载视频的方法变得越来越困难。
为了解决这个问题,一些有识之士创建了一些诸如“维棠”、“硕鼠”等不以盈利为目的的视频解析下载网站,不过好景不长,一些视频网站为防止下载逐渐开始采用片段式视频流技术,此外,由于触及了某些法律规定,最终这些下载网站都被迫整改,诸多功能都遭到限制。勉勉强强还有IDM软件还继续支撑着,不过也只是形同鸡肋。
Read More →
使用you-get下载各大视频网站的视频
我刚才在网上下载了一款saber的鼠标指针宝,但是里面自带的安装文件配置有误,导致安装失败。我想自己改一下安装文件,不过自己手动改的话挺麻烦的,还好找到了这个软件。
鼠标指针安装文件生成器 cur_setup_maker_2.0 度盘下载
界面如下:
首先你要有一套鼠标指针,然后打开软件,选择存放鼠标指针的文件夹,鼠标指针就会在左侧显示出来。
然后把鼠标指针拖到右边对应的区域里,全部放完之后就可以选择生成exe格式的安装包,或者仅生成配置文件(会在鼠标指针的文件夹里生成一个AutoSetup.inf)。
生成之后右键安装就ok啦~
鼠标指针安装文件生成器 cur_setup_maker_2.0
前几天为了测试IDM能不能下载P站的图片,装了IDM。之后IDM自动往chrome里添加了一个扩展,用于让IDM接管浏览器的下载行为。这几天我一直没用过这个功能,刚才去素材网站下载一个文件,IDM弹出下载框,我就点了下载,结果电脑马上宕机了几秒钟(画面定格,鼠标键盘操作均无反应),之后好了,我以为就这样了,结果几秒后就陷入了永久宕机,硬盘灯不亮,只有电源灯亮,等待一会儿没有恢复,只好重启电脑。
当时我ps里有4个未保存的文档,幸好重启后ps给自动恢复了3个。
之后我去查了下,发现至少在2013年就存在类似情况引起的死机,而我使用的IDM6.28.6是最新版本,但这个问题仍然存在,可拉倒吧,IDM一生黑。
google出来的相关内容更多,除了chrome+idm这个因素,还有个倾向是win7 64位系统上经常发生此问题。不幸的是我也正好是win7 64位。IDM拜拜~
更新:
4 年后(2021 年)我真香了,买了 IDM 正版,在 Win 10/ Win 11 上使用,没遇到过 IDM 导致的问题。