表单提交的SQL语句被存入数据库,是否应判定为SQL注入?
关于SQL注入的判定疑问解答
咱们先把SQL注入的核心本质搞明白:SQL注入是攻击者通过构造恶意输入,让应用程序把这些输入当作SQL命令的一部分去执行,从而实现绕过权限、窃取/篡改数据、执行未授权操作等目的——重点是「被当作SQL命令执行」,而不是「把SQL语句存在数据库里」。
回到你举的例子:联系表单里输入SELECT * FROM users,应用只是把这段文本当作普通内容存入数据库,完全没有把它当作SQL指令去执行,这种情况绝对不属于SQL注入。
举个对比的例子你就能更清楚:比如登录表单,攻击者输入' OR 1=1--,如果应用直接把这个输入拼接到查询语句里(比如原本的SQL是SELECT * FROM users WHERE username='{输入}' AND password='{输入}'),那攻击者的输入就会把SQL改成SELECT * FROM users WHERE username='' OR 1=1--' AND password='xxx',这时候SQL的逻辑被篡改,会直接返回所有用户数据,这才是典型的SQL注入。
另外补充一点:如果只是存储了这类包含SQL语法的文本,只要后续读取、展示这些数据时,应用没有把它当作代码执行,就不会有注入风险。当然,如果之后在某个场景下(比如用这段存储的文本做数据库查询拼接),那可能会触发注入,但那是后续环节的问题,和你现在说的「存储SQL文本」本身无关。
内容的提问来源于stack exchange,提问作者Abdus Sattar Bhuiyan
相关产品推荐
相关产品推荐

