当前位置:网站首页 >  百科

防网站渗透实操指南:5步落地可直接用的防护措施

时间:2026年06月01日 05:57:31 来源:易频IT社区

本文为可直接复制操作的网站渗透防护实操指南,所有步骤均经过验证,适用于LAMP/LNMP环境,零门槛落地。

一、服务端基础配置加固

1. Nginx核心安全配置

打开Nginx主配置文件(路径:/etc/nginx/nginx.conf),在http模块中添加以下配置:

``` http { 隐藏Nginx版本号,避免泄露给攻击者 server_tokens off; 限制请求体大小,防止上传过大文件触发缓冲区溢出 client_max_body_size 10m; 启用请求限速,防止暴力破解攻击 limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s; 超时配置,避免长连接占用资源 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } ```

执行命令重启Nginx生效:

``` systemctl restart nginx ```

2. PHP安全配置

打开php.ini配置文件(路径:/etc/php.ini),修改以下关键参数:

``` ; 关闭危险执行函数,防止代码远程执行 disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_str,putenv,scandir ; 关闭全局变量注册,防止变量覆盖漏洞 register_globals = Off ; 禁止输出错误信息,避免泄露路径、数据库结构 display_errors = Off ; 开启GPC魔术引号过滤,自动转义用户输入的特殊字符 magic_quotes_gpc = On ```

重启php-fpm生效:

``` systemctl restart php-fpm ```

3. MySQL安全配置

修改MySQL配置文件(路径:/etc/my.cnf),在[mysqld]模块添加安全规则:

``` [mysqld] ; 限制仅本地登录root,防止远程爆破 bind-address = 127.0.0.1 ; 开启通用日志,记录所有SQL操作用于审计 general_log_file = /var/log/mysql/general.log general_log = 1 ; 禁止加载本地文件,防止本地文件包含漏洞 local_infile = 0 ```

重启MySQL生效:

``` systemctl restart mysqld ```

二、SQL注入防护

所有数据库操作必须使用预处理语句,禁止直接拼接用户输入的SQL语句。PHP示例:

``` prepare("SELECT FROM users WHERE username = :username"); $stmt->bindParam(':username', $_GET['username']); $stmt->execute(); $result = $stmt->fetchAll(); ?> ```

防网站渗透实操指南:5步落地可直接用的防护措施

在Nginx站点配置中添加规则,过滤注入特征关键词,修改/etc/nginx/conf.d/你的站点.conf:

``` location / { 过滤union、select等注入常用关键词,阻断请求 if ($query_string ~ "union|select|insert|update|delete|--|'|\"") { return 403; } 应用请求限速规则,防止批量爆破 limit_req zone=req_limit burst=5 nodelay; } ```

重启Nginx生效:systemctl restart nginx

三、XSS跨站脚本防护

在页面头部添加CSP(内容安全策略)响应头,阻止恶意脚本执行。修改Nginx站点配置,在location模块添加:

``` add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"; ```

所有输出到页面的用户输入,必须用htmlspecialchars()转义,示例:

``` ```

四、文件上传漏洞防护

在存放用户上传文件的目录配置Nginx,禁止执行任何脚本文件。修改站点配置,添加uploads目录规则:

``` location /uploads/ { 禁止所有PHP脚本执行,防止上传木马 location ~ \.php$ { deny all; } 仅允许图片类型文件上传 location ~ \.(jpg|jpeg|png|gif)$ { allow all; } } ```

后端校验文件合法性,示例PHP代码:

``` file($_FILES['user_file']['tmp_name']); if (!in_array($file_type, $allowed_types)) { die('非法文件类型,仅允许上传JPG/PNG/GIF图片'); } // 重命名文件,避免文件名攻击(如包含../等路径字符) $new_file_name = uniqid() . '.' . pathinfo($_FILES['user_file']['name'], PATHINFO_EXTENSION); move_uploaded_file($_FILES['user_file']['tmp_name'], '/var/www/html/uploads/' . $new_file_name); ?> ```

五、安全日志与实时监控

安装fail2ban工具,自动拦截暴力破解IP,CentOS系统执行:

``` 安装fail2ban yum install fail2ban -y 设置开机自启并启动服务 systemctl enable --now fail2ban 自定义配置ssh和web登录防护规则 cat > /etc/fail2ban/jail.d/custom.conf << EOF [DEFAULT] 封禁时间86400秒(24小时) bantime = 86400 检测窗口1小时 findtime = 3600 3次失败即封禁 maxretry = 3 [sshd] enabled = true [nginx-http-auth] enabled = true EOF 重启fail2ban生效 systemctl restart fail2ban ```

配置Nginx日志轮转,防止日志占满磁盘,创建logrotate配置文件:

``` cat > /etc/logrotate.d/nginx << EOF /var/log/nginx/.log { daily missingok rotate 14 compress notifempty create 0640 nginx nginx 重启Nginx生成新日志 sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 $(cat /var/run/nginx.pid) fi endscript } EOF ```

所有步骤完成后,需在非生产环境测试1小时,确认防护规则未拦截正常请求后再上线。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图