在CentOS上為PHP實現安全連接,通常涉及到以下幾個方面:
使用HTTPS協議:
配置PHP安全設置:
open_basedir
限制PHP腳本可以訪問的文件目錄。exec()
, system()
, shell_exec()
等。使用安全的數據庫連接:
使用安全的文件上傳:
配置防火墻:
firewalld
或iptables
限制對服務器的訪問。定期更新系統和軟件:
以下是一些具體的步驟:
sudo yum install certbot python2-certbot-apache
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
/etc/pki/tls/certs/
和/etc/pki/tls/private/
)。/etc/httpd/conf.d/ssl.conf
),添加以下內容:<VirtualHost *:443>
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/yourdomain.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/yourdomain.com.key
SSLCertificateChainFile /etc/pki/tls/certs/yourdomain.com.chain
...
</VirtualHost>
編輯php.ini
文件(通常位于/etc/php.ini
),進行以下配置:
; 限制PHP腳本可以訪問的目錄
open_basedir = /var/www/html/:/tmp/
; 禁用危險函數
disable_functions = exec,passthru,shell_exec,system
; 配置錯誤處理
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// 使用預處理語句
$stmt = $mysqli->prepare("INSERT INTO table (column) VALUES (?)");
$stmt->bind_param("s", $value);
$stmt->execute();
$stmt->close();
$mysqli->close();
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
$uploadDirectory = '/var/www/html/uploads/';
if ($file['error'] === UPLOAD_ERR_OK) {
$fileName = basename($file['name']);
$uploadFile = $uploadDirectory . $fileName;
if (move_uploaded_file($file['tmp_name'], $uploadFile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
} else {
echo "Error uploading file: " . $file['error'] . "\n";
}
}
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save
sudo yum update
通過以上步驟,你可以在CentOS上為PHP實現一個相對安全的環境。