Linux下基于LAMP的WEB应用安全防范加固防护方法

    xiaoxiao2022-07-03  116

    WEB 服务器由于 24 小时开放,相当于身在明处,难免暗处黑客的扫描和入侵,所以做好安全防范就是重中之重了。 常见的入侵方式集中在一些薄弱环节,比如 ThinkPHP 框架漏洞、Git 文件泄漏、不规范上传、SQL 注入、未禁用函数等,下面说一下常用的防御措施

    文章目录

    一、安全扫描1. 免费扫描2. 付费扫描 二、php 安全配置1. 运行用户2. php.ini 配置 三、MySQL安全设置1. 版本选择2. 网络和端口的配置3. 用户权限4. 历史日志5. 认证和授权 四、WEB 服务器安全1.Git泄漏2. 用户权限3. 防止 sql 注入4. URL 解析 五、木马查杀和防范1. 快速查找2. 防范 六、框架漏洞

    一、安全扫描

    1. 免费扫描

    奇安信 - https://webscan.qianxin.com 360 旗下专为服务器安全设计的产品

    2. 付费扫描

    阿里云网站威胁扫描系统:https://www.aliyun.com/product/wti?spm=5176.8050868.1280361.170.1cdb3610VUq0yi 价格比较贵,便宜的都 6000 一个月 绿盟按次扫描:https://market.aliyun.com/products/?keywords=绿盟

    二、php 安全配置

    1. 运行用户

    确保运行php的用户为一般用户,如www

    2. php.ini 配置

    disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_exec,proc_get_status,stream_socket_server,fsocket,phpinfo #禁用函数 expose_php = off #避免暴露PHP信息 display_errors = off #关闭错误信息提示 register_globals = off #关闭全局变量 enable_dl = off #不允许调用dl allow_url_include = off #避免远程调用文件 session.cookie_httponly = 1 #http only开启 upload_tmp_dir = /tmp#明确定义upload目录 open_basedir = ./:/tmp:/home/wwwroot/#限制用户访问的目录 open_basedir参数详解 open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号".“来代表当前目录。注意用open_basedir指定的限制实际上是前缀,而不是目录名。 举例来说: 若"open_basedir = /home/wwwroot”, 那么录"/home/wwwroot"和"/home/wwwroot1"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。

    注意: 从网上获取的资料来看,open_basedir会对php操作io的性能产生很大的影响。研究资料表明,配置了php_basedir的脚本io执行速度会比没有配置的慢10倍甚至更多,请大家自己衡量

    open_basedir也可以同时设置多个目录, 在Windows中用分号分隔目录,在任何其它系统中用冒号分隔目录。当其作用于Apache模块时,父目录中的open_basedir路径自动被继承。

    三、MySQL安全设置

    1. 版本选择

    在正式生产环境中,禁止使用4.1系列的 MySQL 数据库。至少需要使用 5.1.39 或以上版本。

    2. 网络和端口的配置

    在数据库只需供本机使用的情况下,使用 –skip-networking 参数禁止监听网络 。数据库若使用云数据库,则限制只能内网访问,禁止外网连接

    3. 用户权限

    确保运行 MySQL 的用户为一般用户,如 mysql,注意存放数据目录权限为mysql vi/etc/my.cnf user = mysql 若存在多个库,则做到单库单用户,严格控制权限

    4. 历史日志

    开启mysql二进制日志,在误删除数据的情况下,可以通过二进制日志恢复到某个时间点

    vi/etc/my.cnf log_bin = mysql-bin expire_logs_days = 7

    5. 认证和授权

    (1) 禁止root账号从网络访问数据库,root账号只允许来自本地主机的登陆。

    mysql>grant all privileges on *.* to root@localhost identified by 'password' with grant option; mysql>flush priveleges;

    (2) 删除匿名账号和空口令账号

    mysql>USE mysql; mysql>delete from user where User=; mysql>delete from user where Password=; mysql>delete from db where User=;

    四、WEB 服务器安全

    1.Git泄漏

    禁止访问:/.git/

    2. 用户权限

    确保运行 Nginx 或者 Apache 的用户为一般用户,如 www,注意存放数据目录权限为 www

    3. 防止 sql 注入

    if( $query_string ~* ".*[\;'\<\>].*"){ return404; }

    4. URL 解析

    关闭存放数据上传等目录的 PHP 解析 location ~* ^/(attachments|data)/.*\.(php|php5)${ deny all; } 针对Apache:关闭图片目录/上传等目录的PHP解析 order allow,deny Deny from all

    五、木马查杀和防范

    1. 快速查找

    php 木马快速查找命令

    grep -r --include=*.php '[^a-z]eval($_POST'/home/wwwroot/ grep -r --include=*.php 'file_put_contents(.*$_POST\[.*\]);'/home/wwwroot/

    利用find mtime查找最近两天或者发现木马的这几天,有哪些PHP文件被修改

    find-mtime -2 -typef -name \*.php

    2. 防范

    (1) 做好之前的安全措施,比如禁用相关PHP函数等 (2) 改变目录和文件属性

    find -typef -name \*.php -exec chomd 644 {} \; find -typed -exec chmod755 {} \; chown -R www.www /home/wwwroot/www.xxx.cn

    (3) 目录隔离 为防止跨站感染,需要做虚拟主机目录隔离

    ① nginx 的简单实现方法 利用nginx跑多个虚拟主机,习惯的php.ini的open_basedir配置: open_basedir = ./:tmp:/home/wwwroot/

    注:/home/wwwroot/是放置所有虚拟主机的web路径 黑客可以利用任何一个站点的webshell进入到/home/wwwroot/目录下的任何地方,这样对各个虚拟主机的危害就很大 例如: /data/www/wwwroot目录下有2个虚拟主机 修改php.ini:

    open_basedir = ./:/tmp:/home/wwwroot/www.sinesafe.com:/home/wwwroot/back.sinesafe.com

    这样用户上传webshell就无法跨目录访问了。

    ② Apache的实现方法,控制跨目录访问 在虚拟机主机配置文件中加入 php_admin_value open_basedir "/tmp:/home/wwwroot/www.sinesafe.com"

    六、框架漏洞

    关注框架官网的漏洞预警及时更新框架核心代码校验上传文件格式,比如仅支持图片文件上传禁用弱口令:123456等登录图片验证码注册发短信前图片验证码接口权限严格控制,防止越权访问,例如 fastadmin 自带权限模块利用好

    大概就这些常见的问题,希望能帮到大家,另外大家有啥补充的欢迎留言共同探讨~

    最新回复(0)