设置open_basedir防止跨站攻击

通过open_basedir配置,可以限制PHP脚本只能访问特定目录下的文件,防止跨站攻击。在宝塔面板中,启用此设置并在.user.ini文件中进行配置,可以增强多站点服务器的安全性。需注意文件的权限管理,确保不可随意修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述
通过设置open_basedir将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
当一个脚本试图打开一个文件时,该文件的位置将被检查。
当文件在指定的目录树之外时 PHP 将拒绝打开它。

特别是当服务器上有多个网站时,非常有必要设置open_basedir,防止黑客跨站攻击。

宝塔中的open_basedir设置


在宝塔中设置open_basedir很方便,找到对应的网站点击设置; 

 

勾选上防跨站攻击则开启了open_basedir;网站根目录下将出现一个.user.ini 

 

.user.ini文件需要修改,该默认有权限限制及不可修改

通过命令:

      chattr -i .user.ini 解除文件不可修改权限,就可以删除.user.ini这个文件了;

将编辑好的文件上传,然后使用 chattr +i .user.ini 重新恢复文件不可更动属性

<think>嗯,用户想了解PHP中限制命令执行的正则表达式规则以及show_source函数的用法。首先,我需要回忆一下PHP中常见的命令执行函数,比如exec、shell_exec、system等,然后思考如何用正则表达式来检测或阻止这些函数的使用。 关于正则表达式规则,常见的做法是匹配这些危险函数的调用模式。例如,检测类似`exec(`或者`system(`这样的结构。可能需要考虑函数名后面跟括号的情况,并且要注意可能的变量函数调用,如`$func = 'exec'; $func(...);`,不过这种情况可能较难用正则完全覆盖。 另外,用户提到的引用[2]中提到了数组绕过preg_match的情况,所以正则规则需要考虑传入的参数是否为字符串,避免被数组绕过导致检测失败。例如,如果正则表达式是用来过滤用户输入,可能需要确保输入是字符串类型,否则preg_match会返回false,从而绕过检查。 然后是关于show_source函数的用法。这个函数用于显示文件的高亮源代码,类似于highlight_file。需要说明它的参数,可以是文件名或者文件句柄,以及返回值等。同时,要注意安全风险,比如如果用户能控制文件名参数,可能导致路径遍历或敏感文件泄露,所以使用时必须严格校验输入。 可能还需要结合引用[5]中的正则表达式元字符和函数,比如使用`\b(exec|system|shell_exec)\s*\(`来匹配函数名后跟括号的情况,并考虑转义字符和空格的可能性。同时,引用[4]中的IP匹配正则可能对编写其他模式有帮助,但这里主要关注函数名检测。 另外,用户提供的引用[1]中的替换示例,可能涉及到正则中的替换操作,但这里主要关注检测而不是替换。所以需要构造一个匹配危险函数调用的正则模式,并注意子模式的使用,但在这个场景下可能不需要替换,只是检测是否存在。 最后,要提醒用户,仅靠正则可能不够,还需要结合其他安全措施,如禁用危险函数、输入验证、设置open_basedir等。同时,show_source函数的使用建议避免动态文件名,或确保文件名是安全可控的。</think>### PHP限制命令执行的正则表达式规则 在PHP中限制命令执行,通常需要过滤敏感函数(如`exec`、`system`、`shell_exec`等)和特殊符号(如反引号\`\`、管道符`|`)。以下是常见的正则表达式规则: 1. **匹配危险函数调用**: ```php /\b(exec|system|shell_exec|passthru|popen|proc_open|pcntl_exec)\s*\(/i ``` - `\b`表示单词边界,避免误匹配类似函数名的子字符串。 - `\s*`匹配函数名后的任意空格。 - `\(`匹配左括号,确保匹配函数调用而非字符串[^2][^5]。 2. **匹配反引号执行命令**: ```php /`.*?`/ ``` - 反引号在PHP中会直接执行命令,需禁止其使用[^2]。 3. **匹配管道符或重定向符号**: ```php /(\||\>|\<|&)/ ``` - 防止通过管道符组合命令或重定向输出[^4]。 4. **御变量函数调用**(如`$func = 'system'; $func('ls');`): ```php /\$.*?\s*\((.*?)\)/ ``` - 需结合代码审计,动态函数调用可能绕过简单正则检测[^2]。 --- ### `show_source`函数用法 `show_source`函数用于高亮显示PHP源代码,功能与`highlight_file`相同。其语法为: ```php bool show_source(string $filename [, bool $return = false]) ``` - **参数**: - `$filename`:需高亮显示的文件路径。 - `$return`:若为`true`,函数返回高亮后的HTML代码而非直接输出[^1]。 - **示例**: ```php // 直接输出高亮代码 show_source('example.php'); // 返回高亮代码并保存到变量 $highlighted = show_source('example.php', true); ``` - **安全风险**: - 若文件名由用户输入控制,可能导致路径遍历攻击(如`show_source($_GET['file'])`),需严格校验输入[^2]。 - 建议禁用此函数或限制访问路径(通过`open_basedir`)[^3]。 --- ### 综合建议 1. **代码审计**:结合正则表达式静态扫描工具(如`preg_match`)检测危险函数[^2][^5]。 2. **禁用高危函数**:在`php.ini`中设置`disable_functions = exec,system,shell_exec,...`。 3. **输入过滤**:对用户输入进行白名单校验,避免动态执行文件名或命令[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值