《中国新闻网》客户端分享出来的文章,用PHP常规采集获取不到新闻内容。经过一番探索,发现了其中的“秘密”。现将过程分享如下。
打开这个网址:https://m.chinanews.com/wap/detail/zw/gn/2022/02-23/9683825.shtml 查看网页源码,很显然新闻内容都是通过JS加载进来的。
在浏览器中按F12,打开“开发者工具”,切换到“Network”面板,按F5刷新页面,结果出来了。点击“Fetch/XHR”子面板,第二条就是获取内容的链接。
我们在该链接上点鼠标右键选择“Open in new tab”却发现打开的网页没有任何内容。看来是在“Request Headers”上做了“手脚”。
通过几次比较“Request Headers”。发现只有“accessToken”和“timestamp”有变化。 阅读全文…
平常在本地电脑上搭建PHP运行环境,我都喜欢使用WampServer。它安装简单,选择PHP版本和配置PHP扩展也方便。最近要调试Laravel框架,需要将WampServer默认的www根目录更改为Laravel的public目录。由于之前没有改过就从网上找了一下教程,结果还真是涨见识了。网上那些教程千篇一律,也不知转谁的?多久前发的?要到WampServer安装目录里找配置文件,还要更改好几个,操作麻烦。没敢按网上教程动手,仔细研究了一下,发现很简单。
WampServer使用的Web服务是Apache,它的配置文件是httpd.conf,只要更改它就可以了。在实地操作时我又发现Apache有虚拟主机设置,也就是有httpd-vhosts.conf配置文件。只要更改它里面的路径地址(或者新建虚拟主机),再重启一下服务即可生效。操作图示如下:
近年来XSS攻击成为了主流,这种攻击原理很简单,黑客将精心构造的JS代码,通过留言或评论的方式提交到系统中,如果系统过滤不严,管理员在后台查阅时,代码就会被执行,登陆的Cookie就被窃取,黑客用此Cookie轻松登陆系统,然后上传木马、提权破坏等等。
防范XSS攻击,主要在于严格过滤用户提交来的数据,对于PHP语言常用strip_tags、htmlspecialchars等函数来处理。但黑客的手段也千奇百怪,利用各种编码、BUG来逃脱过滤,防不胜防!专业的事要交给专业的人来处理,笔者一般喜欢使用htmlpurifier这款富文本HTML过滤器,它采用白名单机制,能有效过滤掉用户提交表单中的非法HTML标签,防范XSS效果明显!
当然,随着技术的进步,也有可能出现htmlpurifier过滤不了的情况,我们该想个应对的办法,如何让黑客拿到cookie也无法登陆呢?
分析系统登陆后发现,大多数的登陆过程都是验证过帐户名和密码之后,在Session中保存登陆成功的标志,然后生成Cookie,每次用户来访问,只要根据Cookie找到对应的Session,验证其中的标志即可。Session好比超市门口的储物柜,Cookie就是条码纸,如果条码纸被别人偷去了,小偷也可打开储物柜。如何防范单一的条码纸开箱?按近来年流行双重验证的做法,让储物柜在生成条码纸的时候,同时记下用户的特征码(如密码、手机号等),这样即使条码纸被小偷偷去,小偷也开不了箱。
按照这个思路,我们只要对系统稍稍改造即可!用户初次登陆,系统保存登陆成功标志到Session中的时候,同时记下用户的IP地址,然后用户每次请求验证的时候,拿现在的IP地址与Session中的IP进行比较,不符则验证失败,清除Session重新登陆!如此,黑客即使拿到Cookie,由于IP不符,也无法登陆成功!
参考代码如下:
1
2
3
4
5
| <?php
//登陆验证成功后
$_SESSION['LoginAccess'] = 'TRUE';
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
?> |
<?php
//登陆验证成功后
$_SESSION['LoginAccess'] = 'TRUE';
$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php
//每次请求时验证
If ($_SESSION['LoginAccess'] == 'TRUE'){
$ip = $_SERVER['REMOTE_ADDR'];
If ($_SESSION['IP'] == $ip){
return true;
}else{
return false;
}
}else{
return false;
}
?> |
<?php
//每次请求时验证
If ($_SESSION['LoginAccess'] == 'TRUE'){
$ip = $_SERVER['REMOTE_ADDR'];
If ($_SESSION['IP'] == $ip){
return true;
}else{
return false;
}
}else{
return false;
}
?>
附:在php中为Session的Cookie开启HttpOnly,让黑客获取不到Cookie也是个好办法。开启方法如下:
PHP5.2以上版本,打开php.ini 设置session.cookie_httponly = TRUE
或者在代码中开启:ini_set(“session.cookie_httponly”, 1);
自从kmplayer搞了“小花招”之后,就从我的系统中彻底消失了。替代它的是它原作者的新作potplayer。当我们从谷歌上搜索它时,总是先找到“http://www.potplayer.org/”网站,这个自称为官网的网站并不是真正的官网,可能是国内的一个爱好者制作的。真正的官网地址是:http://potplayer.daum.net/?lang=zh_CN。
比较一下两个站你就会发现potplayer.daum.net,有版本更新记录,有可靠的下载链接,还提供多种语言,32位和64位版本等,给人的感觉就非常可靠。potplayer.org上的版本号一直都比官网的高,不知何故?
感觉有必要记录一下,以方便有此需要的朋友!
上面这张图是典型的刷票机工作记录表,从图上有两点发现:一是刷票机没有采用伪造HTTP头的办法突破IP限制(HTTP_X_FORWARDED_FOR中没有路由中转地址),估计是HTTP代理(IP没有规律);二是刷票机采用多线程高频率来发送数据,这样会造成IIS负载增大,以致无法响应其它用户的请求,所以在一小段时间里都是该刷票机的记录。
刷票机之所以能如此疯狂地工作,前提是它要突破两道限制,一是验证码,二是IP地址。
验证码是防机器最有效的手段,可我没有能力写出坚强的验证码,所以一直以来都在寻找免费开源产品。最先考虑使用Google的reCAPTCHA的验证码系统,但由于实在不易辨认以及“墙”的原因很多地方无法显示,而被迫放弃。后来又找到国内的“皕应HCaptcha”验证码,不知是由于免费版的缘故还是其它什么原因,该验证码仍然可以被破解。对此我没有办法,只能今后加强学习,弥补此处的不足。
关于IP限制是一个地址只能投一票,据我所知目前有四种方式突破: 阅读全文…