背景
有一个项目,需要给第三方桌面软件做二次开发。
但是这个软件启动时会弹出一个页面,这个页面的权限很大,如果不禁止掉的话,会给系统安全带来风险。
所以需要拦截掉该网页。
准备工作
- 安装 xampp
- 设置Firefox的network.proxy.allow_hijacking_localhost为true(转https://blog.csdn.net/qq_33020901/article/details/105546995)
- 将Apache 注册到服务 httpd.exe -k install -n Apache
- 如果默认浏览器是IE,则需要更换。谷歌,火狐内核的都行
解决方案
首先需要使用 LAN本地代理将所有http请求定向到Apache上
下面的代码用bat文件
执行。
@echo off
echo 开始设置IE代理上网
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d "http=127.0.0.1:80" /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /d "<-loopback>" /f
echo 代理设置完成按任意键关闭
pause>nul
然后配置Apache的.htaccess文件
(如果不好使的话,应该是需要在httpd.conf中开启什么功能)
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^/movie/([0-9]+)($|/$) /index.php?s=/movie/toMovieInfo/id/$1 [L]
然后编辑php文件
,文件使用ASCII编码
<?php
if($_SERVER['SERVER_PORT']=='9091')
{
header('Location: http://www.baidu.com');
}
else{
if(substr($_SERVER['PHP_SELF'],-4)=='.css'){
header("Content-Type:text/css;charset=utf-8");
}else{
header("content-type:text/html;charset=utf-8");
}
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$cookie = '';
foreach($_COOKIE as $k => $v){
$cookie.= $k.'='.$v.';';
}
curl_setopt($ch, CURLOPT_COOKIE, $cookie);//请求cookie
if($_SERVER['REQUEST_METHOD'] == 'POST'){
//声明使用POST方式来进行发送
curl_setopt($ch, CURLOPT_POST, 1);
//发送什么数据呢
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));//重点
//忽略证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
//执行
$sContent = curl_exec($ch);
$followLocationUrl = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
if($followLocationUrl != $_SERVER['REQUEST_URI']){
header('Location: '.$followLocationUrl);
}
if(curl_errno($ch)){
echo curl_error($ch);
}
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($sContent, 0, $headerSize);
preg_match('/Set-Cookie: (.*)=(.*);path=(.*);/iU',$header,$str); //正则匹配
if(count($str)>1){
setcookie($str[1],$str[2],time()+3600*24,$str[3]);//响应头 set-cookie
}
$body = substr($sContent, $headerSize);
//释放curl句柄
curl_close($ch);
echo $body;
}