单纯靠数据库配置防不住SQL注入代码漏洞,但关闭local_infile、secure_file_priv、禁用高危函数等可大幅缩减攻击面,阻断数据导出与服务器文件写入。

SQL注入不是配置能防住的,但关掉危险特性真能减少攻击面
直接说结论:单纯靠数据库配置关功能,防不住拼接SQL的代码漏洞;但它能堵住像LOAD DATA INFILE、SELECT ... INTO OUTFILE、存储过程动态执行这类“高危通道”,让攻击者没法把数据拖走或写入服务器文件系统。
很多团队以为开了sql_mode=STRICT_TRANS_TABLES就安全了,其实那只是让报错更早,不等于过滤恶意输入。
必须关闭的三个MySQL特性(5.7+ / 8.0)
这些功能默认开启,但日常业务几乎用不到,却是SQL注入后横向移动的关键跳板:
-
local_infile:关掉它,LOAD DATA LOCAL INFILE直接报错ERROR 1148 (42000): The used command is not allowed with this MySQL version -
secure_file_priv设为NULL或空字符串(非/tmp之类可写路径),禁用所有INTO OUTFILE和DUMPFILE写入能力 - 禁用
system函数(如果用了Percona或MariaDB):在my.cnf加disabled_storage_engines="ARCHIVE,BLACKHOLE,FEDERATED",顺便干掉FEDERATED引擎——它曾被用来跨库执行任意SQL
PostgreSQL里要盯紧这些配置项
PG不像MySQL那样有显式的“文件导入开关”,但pg_read_file()、pg_ls_dir()、COPY FROM PROGRAM才是真正的风险点:
- 把
pg_hba.conf里所有非必要用户的trust认证全换成md5或scram-sha-256,防止本地提权后直连 - 运行时禁用高危函数:
REVOKE EXECUTE ON FUNCTION pg_read_file(text, bigint, bigint) FROM PUBLIC;(同理处理pg_ls_dir、pg_stat_file) - 在
postgresql.conf中设log_statement = 'mod'+log_min_duration_statement = 1000,快速发现异常COPY或DO $$ ... $$块
SQL Server里别忽略xp_cmdshell和OLE Automation
一旦Web层被注入且拿到db_owner权限,这些扩展存储过程就是服务器沦陷的终点:
- 立刻执行:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; - 同样关掉:
EXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE; - 检查
sys.server_permissions视图,确认没有普通账号被误授CONTROL SERVER——这是绕过所有数据库级权限控制的后门
最常被忽略的是:哪怕关了xp_cmdshell,攻击者仍可能用sp_oacreate调用WScript.Shell,所以得一并清理OLE相关权限。配置不是一劳永逸的事,而是每次升级、每次部署新服务后都要复查的基线动作。

















