赞
踩
MyBatis能用#{}
尽量用#{}
,而本文主要解决必须要用${ }
的情况下,如何解决${}
导致的SQL注入安全漏洞修复
造成 SQL Injection 漏洞的根本原因在于攻击者可以更改 SQL 查询的上下文,导致程序员原本要作为数据解释的数值却被解释为命令。构造 SQL 查询后,程序员知道哪些字符应作为命令解释,哪些字符应作为数据解释。参数化 SQL 语句可以防止直接窜改上下文,避免几乎所有的 SQL Injection 攻击。参数化 SQL 语句是用常规的 SQL 字符串构造的,但是当需要添加用户提供的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员明确告知数据库哪些字符应被视为命令,哪些字符应被视为数据。这样,当程序准备执行某个语句时,它可以为数据库指定每一个捆绑参数所使用的运行时值,而不会存在数据被篡改为命令的风险。
select * from ${tablename}
delete from ${tablename}
select * from xxx order by ${fieldName}
drop t
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。