V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liangming1
V2EX  ›  PHP

PHP 书写<? PHP 问题

  •  
  •   liangming1 · 2018-09-07 14:37:28 +08:00 · 3448 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    其实还有更简单的办法,能执行代码的目录一律设置不可写入。
    能写入的目录不可执行,直接当做二进制输出。
    fcten
        2
    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
        3
    34C  
       2018-09-07 15:58:43 +08:00
    存放上传文件的文件夹 不应该有执行脚本的权限,任何文件都不应该被执行
    liangming1
        4
    liangming1  
    OP
       2018-09-07 16:44:16 +08:00
    @imdong
    @fcten
    @34C
    谢谢大佬的不吝解答。
    Heimo
        5
    Heimo  
       2018-09-07 16:48:55 +08:00
    realpg
        6
    realpg  
       2018-09-07 17:31:00 +08:00   ❤️ 1
    @liangming1 #4
    php 文件通过版本库联动部署 都是 root 权限 www-data 不可修改
    框架只有 index.php 主入口文件让 php-fpm 执行 不要弄 *.php

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

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

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

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

    其他目录下的.php 还是 chown a-w 吧
    当然如果你用 root 运行了 php-fpm 这是无效的。
    liangming1
        14
    liangming1  
    OP
       2018-09-12 15:56:15 +08:00
    我找到修改的方法了,但是有个问题,修改了源码之后重新编译,会出现一个问题,cp: cannot stat `ext/phar/phar.phar': No such file or directory .
    liangming1
        15
    liangming1  
    OP
       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
        16
    liangming1  
    OP
       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 .这个错误,目前我还没有办法解决这个问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.