加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 服务器 > 安全 > 正文

网易游戏运维林伟壕:永不落幕的数据库SQL注入攻防战

发布时间:2021-01-12 08:31:59 所属栏目:安全 来源:网络整理
导读:《网易游戏运维林伟壕:永不落幕的数据库SQL注入攻防战》要点: 本文介绍了网易游戏运维林伟壕:永不落幕的数据库SQL注入攻防战,希望对您有用。如果有疑问,可以联系我们。 讲师介绍 主题简介: 1、数据库有什么安全问题 2、何为数据库注入 3、数据库注入攻

对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双”-“进行转换等.
不要使用动态拼装SQL,可以使用参数化的sql或者直接使用存储过程进行数据查询存取.
不要把机密信息明文存放,加密或者hash掉密码和敏感的信息.
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行封装.

下面我针对PHP和Pyth的反SQL注入讲2个例子,因为平时用的比较多的是ThinkPHP和Flask这2个Web框架.

PHP

where方法使用字符串条件的时候,支持预处理(安全过滤).
$Model->where(“id=%d and username=’%s’ and xx=’%f'”,array($id,$username,$xx))->select();

模型的Query和execute方法 同样支持预处理机制,例如:
$model->query(‘select * from user where id=%d and status=%d’,$id,$status);

Python

cur=db.cursor()
sql = “INSERT INTO test2(cid,author,content) VALUES (%s,%s,%s)” #使用%s而不是’%s’
sql=sql%(‘2′,’2′,’bb’)
cur.execute(sql,())

2、数据库

从架构和运维两方面谈谈如何在数据库层面进行防御.

(1)架构

首先是架构层面,处于性能和安全考虑,可以在数据库集群与Web Server等前端中间增加DBProxy的中间件,比如Batis或者MyCat.

DB-Proxy Batis MyCat

如图18所示,MyCat中实现了MySQL的预处理协议,可以接收预处理命令的处理.当使用预处理查询,也可以返回正确的二进制结果集包,通过这个预处理,可以实现对SQL注入的过滤和拦截.

图18

开源SQL检测、阻断系统 Druid-SQL-Wall
Druid提供了WallFilter,基于SQL语义分析来实现防御SQL注入攻击.

(2)运维

然后是运维层面,可以在进程管理、用户授权、端口开放等方面进行攻击缓解甚至遏制.

进程启动用户

mysql 23400 22671 0 Mar19 ? 00:13:25 /usr/sbin/mysqld –basedir=/home/mysql –datadir=/home/mysql –plugin-dir=/usr/lib/mysql/plugin –user=mysql –open-files-limit=8192 –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/run/mysqld/mysqld.sock –port=3306

数据库用户授权

mysql> show grants for gs@101.101.101.101;
| GRANT SELECT,INSERT,DELETE,UPDATE,USAGE PRIVILEGES ON `gameserver`.* TO ‘gs’@’10.10.10.10’ BY PASSWORD ‘*89DCA7B59FD064E3A478xxxxxxxxxF272E7E’
iptables
-A INPUT -p tcp -m tcp –dport 3306 -j MYSQL
-A MYSQL -p tcp -m tcp –dport 3306 -j REJECT –reject-with icmp-port-unreachable

3、Web Server

接下来,除了前面讲的代码、数据库层面进行数据库注入的防御,其实如果有Web前端,一般还是可以在Web Server层面进行拦截,实现一个多层次的、立体的防护体系.

下面将介绍Web Server配置、Web防火墙两方面的防御思路.

配置,配置,还是配置

在Web Server的vhost设置查询字符串过滤,一旦用户提交的字符串存在安全隐患,就会直接进行拦截.由于这个匹配度很高,误杀可能性很低,不过在业务量比较大的情况下,会损耗Web Server一定性能.

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读