phpcurl404
A. linux服务器中木马怎么处理
以下从几个方面在说明Linux系统环境安排配置防范和木马后门查杀的方法:
一、Web Server(以Nginx为例)
1、为防止跨站感染,将虚拟主机目录隔离(可以直接利用fpm建立多个程序池达到隔离效果)
2、上传目录、include类的库文件目录要禁止代码执行(Nginx正则过滤)
3、path_info漏洞修正:
在nginx配置文件中增加:
if ($request_filename ~* (.*)\.php) {
set $php_url $1;
}
if (!-e $php_url.php) {
return 404;
}
4、重新编译Web Server,隐藏Server信息
5、打开相关级别的日志,追踪可疑请求,请求者IP等相关信息。
二.改变目录和文件属性,禁止写入
find -type f -name \*.php -exec chmod 444 {} \;
find -type d -exec chmod 555 {} \;
注:当然要排除上传目录、缓存目录等;
同时最好禁止chmod函数,攻击者可通过chmod来修改文件只读属性再修改文件!
三.PHP配置
修改php.ini配置文件,禁用危险函数:
disable_funcions = dl,eval,exec,passthru,system,popen,shell_exec,proc_open,proc_terminate,curl_exec,curl_multi_exec,show_source,touch,escapeshellcmd,escapeshellarg
四.Mysql数据库账号安全:
禁止mysql用户外部链接,程序不要使用root账号,最好单独建立一个有限权限的账号专门用于Web程序。
五.查杀木马、后门
grep -r –include=*.php ‘[^a-z]eval($_POST’ . > grep.txt
grep -r –include=*.php ‘file_put_contents(.*$_POST\[.*\]);’ . > grep.txt
把搜索结果写入文件,下载下来慢慢分析,其他特征木马、后门类似。有必要的话可对全站所有文件来一次特征查找,上传图片肯定有也捆绑的,来次大清洗。
查找近2天被修改过的文件:
find -mtime -2 -type f -name \*.php
注意:攻击者可能会通过touch函数来修改文件时间属性来避过这种查找,所以touch必须禁止
六.及时给Linux系统和Web程序打补丁,堵上漏洞
B. 如何在虚拟机上搭建php
虚拟机是window系统还是 linux系统。
window系统就很简单了,直接下载一个集成环境,就可以运行了
linux 系统就要稍微麻烦点
1. php下载以及安装
下载: wget http://am1.php.net/distributions/php-7.3.2.tar.gz
解压: tar -zxvf php-7.3.2.tar.gz
进入目录开始编译安装:
./configure --prefix=/opt/soft/php --enable-fpm
下面是直接把常用的扩展安装好,免得后面在一个一个安装(推荐)
./configure --prefix=/opt/soft/php --with-curl --with-mysqli --with-openssl --with-pdo-mysql --enable-fpm
make
sudo make install
设置快捷访问方式: sudo cp /opt/soft/php/bin/php /usr/local/bin/
把php配置文件放在正确的位置
确认正确位置:php -i | grep php.ini
在下载的安装包中将php配置文件移动过来: sudo cp /opt/packages/php-7.3.2/php.ini-proction /opt/soft/php/lib/php.ini
ps:以后可以通过 php --ini 查看文件所在位置
2. nginx下载以及安装
和上面php一样的步骤,下载--解压--编译--安装
wget http://nginx.org/download/nginx-1.14.2.tar.gz
./configure --prefix=/opt/soft/nginx --sbin-path=/opt/soft/nginx/sbin/nginx --conf-path=/opt/soft/nginx/config/nginx.conf --error-log-path=/opt/soft/nginx/logs/error.log --pid-path=/opt/soft/nginx/logs/nginx.pid --http-log-path=/opt/soft/nginx/logs/access.log --with-http_stub_status_mole --with-http_ssl_mole
sudo make && make install
设置快捷访问方式: sudo cp /opt/soft/nginx/sbin/nginx /usr/local/bin/
简单配置nginx(详细配置后面再重新开文章写),然后浏览器直接访问ip就能访问了(这个时候只能访问html,访问php是直接下载文件)
开启nginx: sudo nginx(sudo nginx -s reload 重启nginx), 查看是否开起nginx: sudo netstat -anp | grep 80(端口号)
3. 配置nginx支持php
nginx不能直接和php通信,需要借助FastCGI(高速地在HTTP服务器和动态脚本语言间通信的接口),需要用到php-fpm(FastCGI Process Manager:FastCGI进程管理器, 他的具体概念可以参照这里搞清楚php-FPM到底是什么),这也是为什么在编译安装php的时候需要带--enable-fpm这个扩展的原因.
I. 启动php-fpm
进入到 /opt/soft/php/etc 这个目录将php-fpm.conf.default改名为php-fpm.conf,编辑他查看最后一行
然后进入最后一行指向php-pm.d目录,将www.conf.default改名成www.conf,并编辑成对应账号,我这里是xunan
然后将/opt/soft/php/sbin/php-fpm设置快捷访问方式,并启动php-fpm,也就是执行下面两个命令
sudo cp /opt/soft/php/sbin/php-fpm /usr/local/bin/ sudo php-fpm
ps: 重启php-fpm: 先ps aux | grep php-fpm,然后kill掉对应的进程
II. 配置nginx支持php
具体配置:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
按照上面配置完成后,在配置文件的root目录下建立一个index.php,编辑
然后重启nginx(sudo nginx -s reload),在浏览器ip访问
C. 如何在iis下安装php
CGI 用户必须在 php.ini 中将 cgi.force_redirect 指令设为 0。其重要细节请阅读 FAQ 中的cgi.force_redirect。此外,CGI 用户可能需要设定 cgi.redirect_status_env 指令。在使用这些指令时,确保它们没有在 php.ini 中被注释掉。
*
PHP 4 的 CGI 文件名是 php.exe 而在 PHP 5 中是 php-cgi.exe。在 PHP 5 中,php.exe 是 CLI 版本,不是 CGI。
*
修改 Windows 的 PATH 环境变量以把 PHP 目录包括进去。这样 PHP 的 DLL 文件,可执行文件和 php.ini 就都可以保留在 PHP 目录中而不用把 Windows 系统目录搞乱了。更多细节见 FAQ 中的设定路径 PATH。
*
IIS 专用用户(通常为 IUSR_MACHINENAME)需要能够读取各个文件和目录的权限,例如 php.ini,docroot 和 session 的 tmp 目录。
*
确保在 php.ini 中正确设定了 extension_dir 和 doc_root 指令的值。这些指令依赖于 PHP 被安装的系统。在 PHP 4 中,extension_dir 是 extensions 而在 PHP 5 中是 ext。因此在 PHP 5 中 extensions_dir 的一个取值例子是 "c:\php\ext",IIS 的 doc_root 的取值例子是 "c:\Inetpub\wwwroot"。
*
PHP 扩展库的 DLL 文件,如 php_mysql.dll 和 php_curl.dll,存放于 PHP 下载的 ZIP 包中(自动安装包里没有)。在 PHP 5 中,很多扩展库都是 PECL 的一部分,可以从“Collection of PECL moles”包中下载,例如 php_zip.dll 和 php_ssh2.dll。点击进入 PHP 下载页。
*
在定义应用程序扩展名映射时,应选中“检查文件是否存在”。以极小的性能为代价,IIS(或者 PWS)会在调用 PHP 之前检查脚本文件是否存在并选出认证方法。这意味着 web 服务器会提供一个有道理的 404 形式错误信息而不是一条 CGI 错误说什么 PHP 没有输出任何数据。
Windows NT/200x/XP 和 IIS 4 或更高版本
PHP 可以安装为 CGI 或者 ISAPI 模块。不管哪种,都需要启动 Microsoft 管理控制台(也可能是“Internet 信息服务”,在 Windows NT 4.0 Option Pack 中或者在 Windows 2000/XP 下的控制面板=>管理工具)。然后右键点击 web 服务器节点(通常为“默认网站”),并选择“属性”。
如果想用 CGI 方式,按如下方法进行:
*
选择“主目录”,“虚拟目录”或“目录”标签页,然后进行:
*
将执行权限改为“纯脚本”
*
点“配置”按钮,选择“映射”标签页。点击“添加”按钮,将“可执行文件”指向适当的 CGI 文件名。例如 PHP 5 的值可能是:C:\php\php-cgi.exe。在“扩展名”中填入 .php。选择“全部动作”(或者“限制为”留空),选中“脚本引擎”。然后点击“确定”。
*
设定合适的目录安全性(在 Internet 信息服务中完成)。如果 NT 服务器使用 NTFS 文件系统,给 I_USR_ 用户加上 php.exe/php-cgi.exe 文件所在目录的可执行权限(通过资源管理器完成)。
要用 ISAPI 模块方式,按如下方法进行:
*
如果不想用 PHP 进行 HTTP 认证,应该跳过这一步。在“ISAPI 筛选器”标签页中添加一个新的 ISAPI 筛选器。“筛选器名称”设为 PHP,“可执行文件”设为 php4isapi.dll/php5isapi.dll 的路径。
*
选择“主目录”,“虚拟目录”或“目录”标签页,然后进行:
*
将执行权限改为“纯脚本”
*
点“配置”按钮,选择“映射”标签页。点击“添加”按钮,将“可执行文件”指向适当的 ISAPI DLL。例如 PHP 5 的值可能是:C:\php\php5isapi.dll。在“扩展名”中填入 .php。选择“全部动作”(或者“限制为”留空),选中“脚本引擎”。然后点击“确定”。
*
完全停止 IIS(NET STOP iisadmin)
*
重新启动 IIS(NET START w3svc)
对于 IIS 6(2003 Server),打开 IIS 管理器,进入 web 服务扩展,点击“添加一个新的 web 服务扩展”,“扩展名”中输入名称,例如 PHP,再点击“添加”按钮,点击“浏览”选择要么 ISAPI 文件(php4isapi.dll 或 php5isapi.dll)或者 CGI 文件(php.exe 或 php-cgi.exe)作为“文件路径”后点“确定”,然后选中“设置扩展状态为允许”并点“确定”。
要使用 index.php 作为默认文档,在“文档”标签页中选择“添加”。输入 index.php 并点“确定”。用上下箭头按钮调整顺序。这和在 Apache 中设定 DirectoryIndex 相似。
对于每个要关联为 PHP 脚本的后缀都要重复以上步骤。.php 是最常用的,此外为兼容一些遗留下来的老程序可能还需要加上 .php3。
如果过些时候之后碰到 CPU 占用率达到 100%,则取消选中“缓存 ISAPI 应用程序”(“主目录”下点“配置”按钮”)。
1 怎样将 PHP 目录加入到 Windows 路径 PATH 中去?
在 Windows NT,2000,XP 和 2003 下:
*
进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统,Windows XP/2003 中是:开始 -> 控制面板 -> 系统)
*
选择“高级”标签页
*
点击“环境变量”按钮
*
在“系统变量”栏中
*
找到 Path 这一项(可能需要向下滚动才能找到)
*
鼠标双击 Path 这一项
*
在最后加入你的 PHP 目录,包括前面的“;”(例如:;C:\php)此处好像是ext的目录
*
点击“确定”并重新启动电脑
注意: 记住在上述修改之后重新启动,以确保对 PATH 的改变生效。
PHP 手册过去提倡把文件拷贝到 Windows 系统目录中去,这是因为该目录(C:\Windows,C:\WINNT,等等)默认就在系统路径中。但是把文件拷贝到 Windows 系统目录中这一方式早已不被提倡,还可能造成问题。
2 怎样使 php.ini 文件在 Windows 下被 PHP 所用?
有几种方法。如果使用 Apache,阅读专门的安装指示(Apache 1,Apache 2),否则就必须设定 PHPRC 环境变量:
在 Windows NT,2000,XP 和 2003 种:
*
进入控制面板并打开“系统”图标(开始 -> 设置 -> 控制面板 -> 系统,Windows XP/2003 中是:开始 -> 控制面板 -> 系统)
*
选择“高级”标签页
*
点击“环境变量”按钮
*
在“系统变量”栏中
*
点击“新建”按钮并在“变量名”中输入“PHPRC”,在“变量值”中输入 php.ini 文件所在的目录(例如:C:\php)
*
点击“确定”并重新启动电脑
D. PHP获取客户端状态码返回200或404
今天做了个程序,需要取得HTTP状态码,于是继续搜索无力,果然中文资源非常少,于是去查了PHP的手册。
找到了curl这个小工具。
使用curl需要在php.ini中设置启用才行 >< Windows的服务器中,打开php.ini,找到:
extension=php_curl.dll
去掉前面的注释既可 。
实现代码如下:
$curl = curl_init();
$url=’http://www.smdcn.net’;
curl_setopt($curl, CURLOPT_URL, $url); //设置URL
curl_setopt($curl, CURLOPT_HEADER, 1); //获取Header
curl_setopt($curl,CURLOPT_NOBODY,true); //Body就不要了吧,我们只是需要Head
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //数据存到成字符串吧,别给我直接输出到屏幕了
$data = curl_exec($curl); //开始执行啦~
echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //我知道HTTPSTAT码哦~
curl_close($curl); //用完记得关掉他
完成~~