网站建设

百度嵌入式站内搜索https化实践分享

百度站内嵌入式搜索,相信很多网站都已经用了有一段时间了。可惜在百度自己大力提倡网站https化的同时,百度的周边产品却自己打脸了,完全跟不上进度。 不得不说,百度这个嵌入式站内搜索给了网站更多的DIY遐想,让搜索更加贴合各种主题,原汁原味: Ps:预览地址:https://zhang.ge/search.html ,怎么制作这里就不赘述了,请参考本站历史教程。 这玩意好是好,但是不支持https!不过,我们可以有多种办法来变相实现。比如,利用七牛将百度分享https化、利用七牛将百度打赏https化,貌似七牛无所不能哦? 这里,当然也是可以利用七牛来解决问题,但是我并不想“邯郸学步”,所以这里打算用Nginx来实现。 一、改造原理 Ps:只求结果,不求过程的朋友请忽略此段啰嗦内容! 由于百度站内嵌入式搜索不支持https,那么就算把主js(iframe.js)本地化或者七牛化,也只是这一个文件实现了https!从这个js加载出来的图片等各种资源却还是调用的百度的http资源!因此,我们得分析这个js会调用的资源,然后全部https化。 百度嵌入式搜索其实就一个主js:http://zhannei.baidu.com/static/js/iframe.js,我们把它下载到本地,然后将其中的百度静态域名全部清空,只保留相对路径。比如:http://zhannei.baidu.com/customer_search/***,我们需要删除协议和域名部分,改成 /customer_search/*** 这种相对路径,这样我们才可以实现 Nginx 反代,七牛也是一样原理。 可能,光从肉眼去看js具体调用了哪些静态资源是比较困难苦逼的,这是我们可以将js上传到本地,然后将百度嵌入式代码改成本地js,刷新前台的时候就可以在F12控制台去看某某资源因为不是https被拦截了,这样就知道哪些资源还需要继续改造了! 二、改造代码 既然分享,说明第一步的苦逼工作也已经做过了,直接分享代码: 将以上代码保存为js文件,比如 baidusearch.js ,然后上传到服务器网站目录,(推荐放于主题下,比如:/wp-content/themes/begin/js/baidusearch.js) 然后,将百度站内嵌入式搜索代码中的iframe.js地址替换为以上js地址,到此完成网站代码部分改造: Ps:更多内容,请参考本站历史教程吧 三、反向代理 第二步还只是将相关资源全部指向了本地,所以下面需要改造Nginx,将这些指向全部反代到百度站内搜索,修改很简单,将以下Nginx代码添加到网站Nginx配置的 location / { 之前: 如果,Nginx集成了ngx_cache_purge 缓存模块,那么可以将上述代码中的缓存规则打开,避免每次搜索还要到百度去请求资源【相关教程】! 规则添加后,重启或重载Nginx即可生效。这时候,https前台就能正常使用百度嵌入式站内搜索了! 四、更多花絮 https实现了,但是还是有些瑕疵,那就是搜索结果中缩略图默认使用https协议,可能会被浏览器拦截。在张戈博客应用这个改造后,发现大部分缩略图居然返回403禁止了,仔细看了下,大部分如下形式: http://i8.baidu.com/it/u=1582249672,3936911246&fm=85&s=6BAAA3475C1300C649B5710B0100E09 看来是百度站内搜索zhannei.baidu.com开启了防盗链机制,自己不支持https,还不让别人改造么?于是直接给站内搜索管理员发了一份邮件: 目前,站内搜索确实取消防盗链了,虽然管理员牛逼哄哄的也没回我邮件。。。 虽然不再禁止访问了,但里面的图片依然是http协议的,严格的浏览器还是会禁止加载,不过对于完全不能用来说,这个瑕疵还算可以忍受!
阅读全文
网站建设

分享张戈博客自用的仿百度打赏功能

分享前,我必须承认文章打赏功能,在大部分网站只是一个鸡肋、花哨的功能,食之无味,弃之可惜。但是,大部分站长为了丰富网站的各个方面,也是乐此不疲的折腾了这个然并卵的功能。 好了,我先不管它有没有用,先分享出来,想必还是有不少站长乐于折腾的。 一、百度打赏 经常关注百度站长平台的朋友应该都知道百度推出过一个打赏的组件,目测主要是为了推广百度钱包,直到现在还处于内侧状态。张戈博客试着申请了下就通过了。 它的原理很简单,就是在百度站长那设定打赏二维码图片(或百度钱包账号),然后在网站插入一段js代码,js会在页面生成一个赏的按钮,点击后就弹出带有二维码的打赏页面了。 张戈博客还是在使用https的时候就用过这个玩意,还利用七牛对百度打赏进行了https化。但是有2个弊端,驱使着我自己DIY一个: 1、使用百度打赏之后,打开博客网页经常会弹出一个连接超时的提示,甚是烦人; 2、百度打赏由于是实时调用百度在线资源,感觉点击后延迟很明显,给人迟钝的感觉。 二、DIY版本 知道了它的原理,自己就可以DIY一个更丰富、灵活的打赏组件了! Ps:具体效果以及和原版打赏的对比,可点击本文底部的打赏按钮和本站【关于页面】的打赏按钮。 ①、js代码 复制以上代码,将代码中的如下地址替换你对应的付款二维码图片,然后保存为js文件,比如ds.js: Ps:怎么制作或获取这些二维码图片,我就不啰嗦了,相信大家都搞的定。 最后上传到网站存放js文件的目录,比如WordPress主题目录,最终网站前台可以访问到这个js即可: 比如:http://xxx.com/wp-content/themes/begin/js/ds.js ②、html部分 将上述html代码按照实际情况修改后,添加到博客主题想要放置打赏按钮的地方,比如文章底部。具体是哪个文件,不同主题都是不同的,所以这里我没法告诉你!想要折腾网站总是要有一定基础的。 全部完成之后,刷新网页应该可以看到效果了,不过我上面的js代码中的css样式只是适配了Begin主题,其他网站用上后是方的还是圆的,就只能靠自己去调试CSS代码了。 三、Begin适配 如果你用的和我一样的主题,那就简单了。还是将上述js代码保存为ds.js文件,丢到Begin主题的js目录,然后修改 begin/inc/social.php 文件,找到如下代码: 替换为(注意备份原文件!): 四、其他说明 很明显,张戈博客分享的这个打赏不但解决了百度打赏的2个问题,还能够随便DIY了,代码默认集成了4种收款方式,如果你觉得多了或少了,也可以自行DIY代码去折腾,前提是你必须懂一点html和js代码,否则错排了就别喷我了! 另外,不管是Begin主题还是其他任何网站,都是可以使用的,但是打赏按钮的样式和位置就只能靠自己调试css代码了。 不啰嗦了,自己去折腾吧!觉得文章有用的话,有钱的可以打赏,没钱的可以点赞,不怕一万多,不嫌一块少......
阅读全文
网站建设

简单修复360安全检测提示的发现robots文件漏洞

很久没看过360的站长平台了,于是在360搜索中site了一把,发现居然安全评分是99,而不是100。好奇点进去看了下,发现下面这个大奇葩: 呐尼?发现robots.txt文件?这也算漏洞?继续看了下解释: 漏洞类型: 信息泄露 所属建站程序: 其他 所属服务器类型: 通用 所属编程语言: 其他 描述: 目标WEB站点上发现了robots.txt文件。 1.robots.txt是搜索引擎访问网站的时候要查看的第一个文件。 - 收起 2.robots.txt文件会告诉蜘蛛程序在服务器上什么文件是可以被查看的什么文件是不允许查看的。举一个简单的例子:当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。同时robots.txt是任何人都可公开访问的,恶意攻击者可以通过分析robots.txt的内容,来获取敏感的目录或文件路径等信息。 危害: robots.txt文件有可能泄露系统中的敏感信息,如后台地址或者不愿意对外公开的地址等,恶意攻击者有可能利用这些信息实施进一步的攻击。 解决方案: 1. 确保robots.txt中不包含敏感信息,建议将不希望对外公布的目录或文件请使用权限控制,使得匿名用户无法访问这些信息 2. 将敏感的文件和目录移到另一个隔离的子目录,以便将这个目录排除在Web Robot搜索之外。如将文件移到“folder”之类的非特定目录名称是比较好的解决方案: New directory structure: /folder/passwords.txt/folder/sensitive_folder/ New robots.txt: User-agent: * Disallow: /folder/ 3.     如果您无法更改目录结构,且必须将特定目录排除于 Web Robot 之外,在 robots.txt 文件中,请只用局部名称。虽然这不是最好的解决方案,但至少它能加大完整目录名称的猜测难度。例如,如果要排除“admin”和“manager”,请使用下列名称(假设 Web 根目录中没有起始于相同字符的文件或目录): robots.txt: User-agent: * Disallow: /ad Disallow: /ma 原文地址:http://webscan.360.cn/vul/view/vulid/139 大概是懂了,就是robots会泄漏网站后台或其他敏感地址,我之前遇到不想让人通过robots知道的地址,我也会使用上述解决办法中的第3条,只写局部字符串。 但是,这些完全是掩耳盗铃的做法,明眼人都能轻松识别博客是WordPress还是其他建站程序,什么敏感目录根本没法隐藏,当然隐藏了也没啥用。 不过,看到不是100分就不爽,所以我也掩耳盗铃的解决一下吧! 我的思路很简单,对于非蜘蛛抓取 robots.txt 行为一律返回403,也就是robots.txt 只对蜘蛛开放。实现非常简单,在 Nginx 配置中加入如下代码即可: 加入后reload以下Nginx,然后再到浏览器访问robots地址,应该能看到禁止访问403了。 随即去360扫描了一把,结果并不意外: 哦了,问题就简单的解决了,仅仅只是为了这句“神马黑客都是浮云,网站安全比肩360,实在是给力!”,呵呵呵。。。挡一挡网络上的匿名扫描还行,其他的就真的只是浮云了。
阅读全文
网站建设

纠正静态文件域名robots写法,解决百度搜索不显示缩略图的问题

可能有部分站长用了七牛CDN之后,会发现在搜索引擎搜索的结果中缩略图越来越少,甚至消失。。。经过张戈多次思考分析,发现居然是因为使用了七牛CDN导致的,本文就简单分享下这个坑。 在此之前,张戈博客曾2次分析过网站使用七牛CDN之后,静态二级域名robots的写法: 百度站长平台robots工具升级后的新发现 浅谈网站使用七牛云存储之后的robots.txt该如何设置? 确实也是可以了,百度图片收录也正常了。 后来博客换成了php缩略图,并通过Nginx将缩略图重写成了 x.png?w=480 的形式【相关文章】。 接着,将缩略图全部丢到了二级静态域名 res.zgboke.com 上,最后将静态域名的robots设置如下: 结果,很久很久之后就发现百度搜索中,缩略图越来越少,甚至到最后几乎没有了。经验告诉我,要么就是蜘蛛抓取不到图片,要么就是被robots禁封了。 结合百度站长平台的robots工具和抓取诊断工具检查后,发现果然是robots误禁封造成的! 百度索引变动一直以慢著称,所以robots写错了也不会在十天半个月突显出来,真是坑的一B! 通过抓取诊断工具,发现普通图片可以抓取,带参数的图片就抓取失败。经过多次测试,发现问题出现在 Allow: /*.png$ 这种写法,是以 png 结尾,尾部不再包含其他任何字符,因此,上文提到的 PHP+Nginx 缩略图形式 x.png?w=480 ,就处在 robots 禁止抓取的范围了: 于是,我将静态域名robots修改如下: 因为最后一行是禁止所有,所以保守起见,robots.txt我也加入了允许规则。第二行则是关键,一般博客的缩略图和图片都在 wp-content 路径下,不管是不是带参数,都统统允许了。 经过了几个月,目前百度搜索的缩略图基本都恢复正常了: 所以,发现搜索引擎缩略图收录异常的朋友,可以先分析下是不是蜘蛛被robots或其他因素拦截了。 最新补充:启福留言说其实把尾巴的$改成通配符*就好了。确实如此,所以静态域名的robots可以修改如下: 这样就可以让蜘蛛仅抓取图片了,范围比 wp-content 更精准一些。总之,对哪种写法存在疑问,只要借助百度站长平台的robots工具检测一下就一清二楚了。 最后强调说明一下,本文说的robots是适用于只存放图片等静态文件的二级域名(比如:res.zgboke.com)!别乱用到主站的robots,被K站了别来哭哦! 再次更新:突然想起一件事,记得之前用过谷歌的移动设备适合性测试工具,是需要抓取css和js的,否则显示出来的布局就是乱的了:而且百度的移动友好度测试工具(目前好像已经隐藏,看不到了)也需要抓取css和js,所以css和js还是得放开,最终版修改如下: 其中,Allow: /wp-content/ 自己看着办吧,个人建议加上,避免遗漏主题特有静态文件,比如字体。
阅读全文
网站建设

分享一个网站防镜像以及解决七牛静态页面跳转的js方案

导读:作为站长,基本都遇到过网站被人镜像的烦恼吧?最典型的代表就是谷歌搜索,大家都懂的。很多时候反代我们网站的人可能就是拿你的网站练下手,学习下反向代理。当遇到网站被反代,而且排名还比你好的时候,有没有要暴走的冲动...本文分享一种简单有效网站防镜像的方案,适合任何html页面。 一、前人分享 挺早之前,看到boke112转载过一篇网站防镜像教程,分享了从.htaccess、php以及js三个方向禁止他人恶意反向代理我们的网站。当时看完觉得三个方法都不完善: 先分析下原理: .htaccess方案是禁止从代理IP过来的请求 js方案如果发现浏览器url地址不是预期的,那么直接跳转到我们规定的域名。 php方案的原理和js方案类似,通过 $_SERVER 变量判断域名判断请求是否符合预期,不是就跳转走。 再分析下缺憾: .htaccess方案,只要请求中含有代理IP(HTTP_X_FORWARDED_FOR不为空)就禁止访问,那如果用CDN的就全部GG了,而且这个值是可以在做反向代理的时候置空的,比如Nginx中可以这样做: php方案中,$_SERVER的值同样可以在反向代理时伪造,比如: 二、优化版本 已推出最终版,所以,此优化版本可以不用了 js方案,这个也是我今天要分享的方案,之前在boke112我也留言分享了张戈博客的做法,不过好像留言被删除了。文章中的js方案可是可以,但是是写死的跳转。也就是说不管在哪个页面,最终跳转都是首页!显然,这个方案还不够精细化,我们可以做得更细致! 所以,网站防镜像最简单有效的做法就是在<head>部分插入如下js代码即可: 这里对文章js方案做了更细致的改善,也就是跳转之前想将当前url做一次替换,把当前url中的域名换成我们规定的域名,确保跳转后就是用户想要的页面,而不是强硬的跳到首页! js方案相对于其他方案来说,它的优势在于无法在反代时伪造,浏览器反馈的就是真实的访问情况,直接粗暴。当然,用 Nginx 的第三方内容过滤模块 ngx_http_subs_filter_module 也可以对反代的页面内容进行过滤,当然这是更高级的手法了,这里就不深入介绍了(请注意这段话,本文分享的只是一个方案,并非绝对有效的方法!!)。 三、最终版本 ①、WordPress专用版 龙笑天下很好的整理总结了目前几种防镜像的js方案,我看到最后一个借助了img的onerror事件,想法不错,就重新写了一个更简洁,兼容性更好的代码: 将此代码添加到主题functions.php文件当中即可。其他类似js可以不用上了,不过也不会冲突。 Ps:本来是丢到wp_head的,经过测试发现图片放到head,浏览器会自动进行错误调整,导致一些本来在head的元素被丢到了body当中,比如style.css,估计网页标准中head里面就不应该放置图片,所以移到了footer当中。 2017年10月21日补充:这段代码会因为onerror死循环造成浏览网页的电脑高负载(CPU飙升),因此在代码onerror触发事件中加入onerror清空机制,即加入this.onerror=null【相关文章】。 ②、HTML通用版 既然是js代码,那么肯定可以用于任何符合html规范的页面了。要不是为了可以放到wp的functions.php,都没必要写成php的模式,直接用html代码即可: 将以上代码中的 自行拆分成自己的域名,避免被镜像代码替换掉,比如: 然后将代码添加到网站的<body>之后即可(不建议放置到<head>里面,具体原因上文已说明),WP一般为header.php文件,其他建站程序请自行搞定,这个版本适合任何网页。 ③、通过UA禁止 JS版本效果确实可以,但是有一个小弊端,大部分搜索引擎不能识别js,所以蜘蛛还是能正常抓取镜像网站,有可能会影响SEO。要彻底解决镜像站问题,就得直接禁止镜像网站服务器抓取我们的网页。 有网站已经分享了通过获取镜像网站的服务器IP来禁止抓取,但是镜像网站换一个IP,或者还有其他镜像网站,都无法一劳永逸。所以,我们可以研究镜像服务器抓取时的特征,然后通过禁止特征来解决镜像问题,当然这个方法也不能绝对,因为特征很多时候都是可以伪造的,这里就不多说了。 14年张戈博客就就已经整理分享过网站反爬虫攻略:《服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站》,其实这种镜像站和采集基本类似,所以我们需要先分析某一类镜像站的UA特征是什么。 抽空对此次站长朋友纷纷“讨伐”的几个镜像站进行了分析,其实就是在访问镜像网页的时候去查看我们的网站日志,我发现全部请求UA都是PHP/5.4.4: 想来也就明白了,这些镜像站点基本都是用的一套程序,甚至环境都是一致的!这让人很容易联想是不是一个人在搞事。。。 好了,废话不多说,既然知道他们的UA了,那么就很好解决了。直接将 PHP这个关键词加入到《服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站》 这篇文章的UA清单中即可! 这里,只简单分享一下PHP代码和Nginx代码,其他的请参考前文。 PHP通用版: 将以上代码加入到PHP网站根目录的index.php的<?php 之后即可。 WP适用版: 如果使用上面的php版本,WordPress每次更新就会需要操作index.php,比较麻烦,因此弄个专版: 将以上代码添加到WordPress主题的functions.php中即可。 Nginx版本: 将以上规则加入到nginx的vhost当中,比如添加到第一个location 之前,然后重载Nginx即可。 我看到有同学使用了htaccess来判断UA,但最后却返回了一个301跳转到首页,虽然也可以,但是有时候镜像程序也是可以抓取301的目标内容的,至少我之前就写过支持301跳转的php代码。 好了,关于镜像网站的问题就整理分享这么多,大家自行选择适合自己的方案即可! 四、拓展延伸 另外,如果是使用https的网站,想将 http 的访问都跳转到 https 又不想弄个301跳转(可能影响SEO),那么上述js代码稍微改改就能完美跳转了: 看到这,你应该体会到了js的妙用吧?后续应该可以举一反三,多多利用了! 五、七牛镜像 用了七牛的网站,可以试试直接访问我们自定义的七牛静态域名,是不是和我们现在的网站一模一样呢?只是它不会更新而已。很多人肯定下意识的试过张戈博客,发现居然会跳转到对应的博客页面! 比如访问:http://static.zhang.ge/5100.html 会跳转到 https://zhang.ge/5100.html 于是,有不少朋友留言问我,怎么实现301跳转的?? 好吧,除非七牛帮忙在CDN节点做设置,将非静态资源请求都跳转到源站,否则张戈也是没办法做301跳转的。因此,你看到的跳转也不是301了,而是js的跳转! 实现原理就是上文介绍的js方案咯!七牛就类似于一个镜像站,而且是静态存储到了七牛节点,因此只能用js方案,在静态页面中实现判断和跳转。 所以,上文分享的js防镜像代码,同样适用于七牛静态页面的自动跳转。只是美中不足的是,大部分搜索引擎并不能识别这个跳转,为了SEO,那你还得继续使用七牛的robots设置了。 当然,如果你添加js代码之前就已经在使用七牛了,那么必须清空七牛中的缓存文件才行,否则是不会跳转的了!因为缓存的代码中没有这段js咯! 最新补充:有人留言说了更好的方案,在Nginx中判断七牛的UA以及抓取的路径就能杜绝七牛缓存不改缓存的页面,要实现也很简单,在Nginx配置中加入如下规则即可: 最后,再啰嗦一句,本文分享的只是小白入门级方案,喜欢喷的朋友建议早点Alt +F4,张戈谢谢你。
阅读全文