PHP 书写<? PHP 问题

2018-09-07 14:37:28 +08:00
 liangming1

最近考虑一个问题,就是如果 web 服务被上传 phpwebshell 要怎么办。 有没这种可能,通过修改 php 的解析方法,比如修改 php 文件 <? php 的置顶头为其他,像<? abc。 这样的话就算有恶意 phpwebshell 文件上传也因为系统无法解析它的语法而不能运行。 如果可以行,请问要怎么修改 php ?是否可以需要修改 php 内核?

3422 次点击
所在节点    PHP
16 条回复
imdong
2018-09-07 14:52:42 +08:00
好思路呦,不过人家直接 在 某个 php 文件末尾加一行 $_GET['a']($_POST['b'])怎么办呢?
嗯,把 php 的文件后缀名也自定义??

其实还有更简单的办法,能执行代码的目录一律设置不可写入。
能写入的目录不可执行,直接当做二进制输出。
fcten
2018-09-07 14:54:30 +08:00
可行,但效果非常有限,而且造成不兼容

https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1935

修改后重新编译 PHP
34C
2018-09-07 15:58:43 +08:00
存放上传文件的文件夹 不应该有执行脚本的权限,任何文件都不应该被执行
liangming1
2018-09-07 16:44:16 +08:00
@imdong
@fcten
@34C
谢谢大佬的不吝解答。
Heimo
2018-09-07 16:48:55 +08:00
realpg
2018-09-07 17:31:00 +08:00
@liangming1 #4
php 文件通过版本库联动部署 都是 root 权限 www-data 不可修改
框架只有 index.php 主入口文件让 php-fpm 执行 不要弄 *.php

这都 8012 年了…… 以上的规定是我 2011 年时候拟的
cncqw
2018-09-07 19:00:35 +08:00
@34C

大佬在 Windows 下怎么设置权限呢
sampeng
2018-09-07 19:16:27 +08:00
@cncqw windows 就不要跑 php 了。。自己折腾自己
ysc3839
2018-09-08 00:56:59 +08:00
@cncqw 右键 属性 安全
msg7086
2018-09-08 01:27:29 +08:00
@realpg 我们 2008 年的时候就在用类似的规则了,那时候大概 PHP 5.0 的年代。
一个 PHP 程序最好就是单个入口,引入框架和组件,统一检查用户权限和输入数据,然后程序部分无法被其他账号修改,甚至最好在 wwwroot 以外,然后可上传的目录禁止一切 PHP 解析。

8012 年了,不应该再用十五年前的习惯来做了。
realpg
2018-09-08 11:35:49 +08:00
@msg7086 #10
我这更绝对一点 只有 index.php 这种框架入口单文件解析
别说上传目录了
而且 云服务出来以后 基本也不设上传目录了 上传文件都丢七牛了
webserver 只有程序 方便基于云服务动态生成新的 vps 直接从版本库拉代码环境自动生成好
realpg
2018-09-08 11:36:28 +08:00
@cncqw #7
windows 也可以设置权限,只是尽量还是别用 windows 跑 PHP
倒不是 PHP 的问题,PHP 问题不大,权限问题也不大

MYSQL 问题巨大,各种莫名其妙问题
Hardrain
2018-09-12 13:21:19 +08:00
上传目录禁用解析器
以 Apache+php-fpm 为例,上传目录的.htaccess 加入
SetHandler !

其他目录下的.php 还是 chown a-w 吧
当然如果你用 root 运行了 php-fpm 这是无效的。
liangming1
2018-09-12 15:56:15 +08:00
我找到修改的方法了,但是有个问题,修改了源码之后重新编译,会出现一个问题,cp: cannot stat `ext/phar/phar.phar': No such file or directory .
liangming1
2018-09-13 13:38:31 +08:00
编译过程之中会生成两个文件,phar.php 和 phar.php ,编译生成的这两个文件是以<?php 开头的,修改了源码的解析头之后,就不能正常读取这两个 php 文件,所以造成 cp: cannot stat `ext/phar/phar.phar': No such file or directory .这个错误,目前我还没有办法解决这个问题。
liangming1
2018-09-13 13:39:07 +08:00
编译过程之中会生成两个文件,phar.php 和 phar.phar,编译生成的这两个文件是以<?php 开头的,修改了源码的解析头之后,就不能正常读取这两个 php 文件,所以造成 cp: cannot stat `ext/phar/phar.phar': No such file or directory .这个错误,目前我还没有办法解决这个问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/487102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX