我继承了一个非常不安全的 php web 应用程序,有 sql 注入的历史。我无法立即修复脚本,我宁愿需要它们运行才能使网站运行,并且有太多的 php 脚本需要首先从 php 端处理。但是,我确实可以完全控制服务器和服务器上的软件,包括完全控制 mysql 数据库及其用户。
让我们估计它总共有 300 个脚本、40 个半私有脚本和 20 个私有/安全脚本。
所以我的问题是如何最好地保护数据,隐含假设来自 php 端的 sql 注入(例如在 300 个脚本列表中的某个地方)是不可避免的?
我的初稿计划是在 mysql 数据库中创建多层不同权限的用户。这样我可以先保护最需要保护的数据和脚本(“私有/安全”类别),然后是第二层数据库表和脚本(“半私有”),最后处理整个 php 应用程序的其余部分(最终保护主要处理“公共”信息的数据库表的结果,例如,即使只是查看主页也需要的东西)。
因此,3 个数据库用户(公共、半私有和安全),三个不同的脚本组(安全脚本、半私有脚本和公共脚本)中的每一个都有不同的用户连接。通过这种方式,我可以阻止从“公共”或“半私有”访问“安全”,以及从“公共”访问“半私有”。我应该考虑其他替代方案吗?如果要采用分层访问系统,那么哪种方法最好?
有一个问题让我抓狂。有一天我尝试修复 VPS 的 CPU 使用问题后,CPU 负载从 60% 增长到 150%,而且我不知道是什么原因导致了问题。请帮我。
我在 Linode 1024 上安装了 mediawiki 的副本。该 wiki 运行在 Niginx + PHP-fpm + MySql 上。该 wiki 的流量并不多,每天只有大约 4000 个请求,大部分来自 Google 和 Bing 机器人。之前它使用了大约 60% 的 CPU(Linode 上总共使用了 400%)。我认为它有点高,所以两天前,我试图解决这个问题(不知道等待我的是什么)。我什么也没做,只是在wiki的配置文件中添加了一个新的空行,这会改变配置文件的修改时间,然后所有缓存的页面文件将被设置为无效。我以前也这样做过,这会导致 CPU 使用率很高,但通常只需要几个小时就能让一切恢复正常。不是这次,我的CPU使用率已经两天多在150%左右了。
使用大部分CPU的就是php-fpm。100%使用三核的情况并不罕见。我以前没见过。Linode上还有其他网站,但应该是wiki。因为如果我将 wiki 离线,CPU 使用率很快就会回落到 40% 左右。
那天我还复制了 php-fpm.conf 并打开它,但没有更改它。
我不知道我做错了什么。我在这里请求帮助,以免自己陷入疯狂!它是 php-fpm。有没有办法知道它在做什么?我的意思是哪些脚本相关以及哪些功能代码正在运行?
顶部:
top - 06:34:33 up 10 days, 4:23, 2 users, load average: 1.10, 1.24, 1.37
Tasks: 76 total, 4 running, 72 sleeping, 0 stopped, 0 zombie
Cpu(s): 61.1%us, 3.1%sy, 0.0%ni, 32.8%id, …Run Code Online (Sandbox Code Playgroud) 我似乎无法在网站根目录(/var/www)中获取 php.ini 文件来覆盖 /etc/php5/apache2 中的 php.ini 值
/var/www/php.ini 内容
upload_max_filesize = 64M
post_max_size = 64M
Run Code Online (Sandbox Code Playgroud)
但同一目录中的页面分别显示它们和phpinfo()的默认值。而wordpress显示最大上传大小为2MB。2M8M
操作系统:Ubuntu 14.04 LTS PHP:5.5.9-1ubuntu4
有什么想法吗?
在 Ubuntu 14.04 中设置一个新的网络服务器并尝试为 PHP 生成的文件争论文件权限。
默认情况下,其中的所有目录和文件/var/www都属于/分组到 www-admin。目录权限为rwxrwsr-x,文件权限为rw-rw-r--。
然后,我们将有限数量的目录上的组设置为 www-data - 这样 PHP(通过 Apache)就可以在此位置写入日志和缓存文件。
但是,我无法让 PHP 遵守 umask 0002,因此 PHP 生成的文件只能写入 www-data 用户。这是一个问题,因为我们使用持续集成和其他一些清理流程。
到目前为止,我有:
/etc/pam.d/common-session/etc/pam.d/common-session-noninteractive/etc/profile/etc/apache2/envvars/etc/login.defswww-data时将 umask 设置为 0002/etc/passwdsudo chfn -o "umask=002" daemon_username我仍然被困住了。
我已经停止/启动了该服务,甚至重新启动了计算机 - 没有乐趣。
nginx 正在杀死我.. 所以现在我有 502 Bad Gateway。错误日志说:
2016/10/12 17:39:53 [info] 3023#0: *464 client closed connection while waiting for request, client: 127.0.0.1, server: 0.0.0.0:443
2016/10/12 17:39:53 [info] 3023#0: *465 client closed connection while waiting for request, client: 127.0.0.1, server: 0.0.0.0:443
2016/10/12 17:39:55 [error] 3023#0: *459 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: local.beerhawk.co.uk, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "local.mydomain.co.uk"
Run Code Online (Sandbox Code Playgroud)
我的 ngninx conf 文件现在看起来像这样:
#user RobDee;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log info;
pid logs/nginx.pid; …Run Code Online (Sandbox Code Playgroud) 我安装了 php 5.5 (fpm) 和 nginx 1.10(gzip 配置为 1)。在 ubuntu 上运行。
当我“回应”一个大输出(超过 2 mb)时,它突然停止在 520 kb 左右。
但是当我在 php-cli 上运行相同的程序时,将整个内容“回显”到终端上没有问题。
通过 adminer 下载 mysql 转储也中途停止。我的意思是下载不完整的文件(如果正确的总输出大几 MB)。
如何解决这个问题?
我的程序没有任何问题。即使是一个足够长的简单循环,也可以在特定字节限制处停止回声“hello world”。
我不确定这个问题是由 nginx 端还是 php 端引起的。
我的系统:
我有很多环境变量想添加到 Apache 中。
我目前正在通过添加到我的/etc/httpd/conf.d/vhosts.conf文件中来做到这一点:
SetEnv API_USERNAME 'my_special_username'
SetEnv API_PASSWORD 'my_special_password'
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式访问 PHP 中的两个环境变量:
echo $_SERVER['API_USERNAME'];
echo $_SERVER['API_PASSWORD'];
// or
echo getenv('API_USERNAME');
echo getenv('API_PASSWORD');
Run Code Online (Sandbox Code Playgroud)
最近,我发现我还可以通过添加环境变量systemd:
我创建文件/etc/systemd/system/httpd.service.d/envvars.conf:
[Service]
Environment="API_USERNAME=my_special_username"
Environment="API_PASSWORD=my_special_password"
Run Code Online (Sandbox Code Playgroud)
其次是
systemctl daemon-reload
systemctl restart httpd
我可以通过以下方式访问 PHP 中的两个环境变量:
echo getenv('API_USERNAME');
echo getenv('API_PASSWORD');
// $_SERVER does not work when I specify environment variables in systemd
echo $_SERVER['API_USERNAME']; // returns blank
echo $_SERVER['API_PASSWORD']; // returns blank
Run Code Online (Sandbox Code Playgroud)
题
在安全性或最佳实践方面,最好使用 SetEnv 或systemd …
我有一个问题,ApachePHP $_SERVER['REQUEST_URI']在 URL 被重写而不是原始请求后将 URL传递给变量。
我正在做这个重写,因为我有一个 WordPress 网站,想把它移动到一个子目录而不是把它放在根路径中,但仍然想保持它的 URL 作为根 URL。
这不会一直发生。如果我请求www.xyz.com/wp-admin它填充 PHPREQUEST_URI变量www.xyz.com/wordpress/wp-admin(这是重写后的 URL),但如果我请求www.xyz.com/wp-admin/(带有尾部斜杠),它实际上填充 PHPREQUEST_URI变量www.xyz.com/wp-admin/(重写之前的原始 URL)。我想要的是REQUEST_URI在重写之前用 URL 填充。
我的.htaccess文件如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wordpress/$1
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
RewriteRule ^(/)?$ wordpress/index.php [L]
</IfModule>`
Run Code Online (Sandbox Code Playgroud)
PHP 版本是 5.3。Apache 版本是 2.4 (Win32)。
更新:我查看了更多,当我输入 URL 时,www.xyz.com/wp-admin首先会有一个 301 重定向,www.xyz.com/wordpress/wp-admin/但这不会发生 …
我在/opt/plesk/php/7.0/etc/php-fpm.d/domain.com.conf文件中修改了 pm.max_children 。
我重新启动了 php70-fpm 服务,想检查我的设置是否启用。
如何检查此设置?
有很多关于将 PHP 升级到下一个主要版本的教程。如果我想对 PHP 进行小幅更新,例如 7.0.1 到 7.0.3,该怎么办?这样做的正确方法是什么?
在本例中,我使用 ubuntu 14。