SQL 在 FORM 身份验证页面中注入
SQL Injection in FORM Authentication pages
SELECT *
FROM admin_table
WHERE username = '' OR '1'='1' AND password = '';
SELECT *
FROM admin_table
WHERE username = '' OR 1=1 OR '1'='1' AND password = '';
SQL 服务器如何解释上述两个 SQL 语句?
在什么情况下 WHERE
子句总是 True?
WHERE
如果 username
为空,或者( 1=1(即。真)并且 password
为空),则为真,因此其中一个必须为空
WHERE
如果 username
为空,或 1=1,或( 1=1 且 password
为空)则为真,因此始终为真。
真正的解决方案是不是通过清理或编写奇怪的查询来尝试并战胜SQL注入。解决方案是将代码和数据分开。代码被执行,数据没有。因此,始终 参数化您的查询。
在我个人看来,SQL 作为一种语言面临的最大问题是它鼓励在任何地方混合代码和数据的临时解释脚本。
如果代码必须在 到达数据库附近之前完全编译,注入就不会成为这样的问题。
SELECT *
FROM admin_table
WHERE username = '' OR '1'='1' AND password = '';
SELECT *
FROM admin_table
WHERE username = '' OR 1=1 OR '1'='1' AND password = '';
SQL 服务器如何解释上述两个 SQL 语句?
在什么情况下 WHERE
子句总是 True?
WHERE
如果username
为空,或者( 1=1(即。真)并且password
为空),则为真,因此其中一个必须为空WHERE
如果username
为空,或 1=1,或( 1=1 且password
为空)则为真,因此始终为真。
真正的解决方案是不是通过清理或编写奇怪的查询来尝试并战胜SQL注入。解决方案是将代码和数据分开。代码被执行,数据没有。因此,始终 参数化您的查询。
在我个人看来,SQL 作为一种语言面临的最大问题是它鼓励在任何地方混合代码和数据的临时解释脚本。
如果代码必须在 到达数据库附近之前完全编译,注入就不会成为这样的问题。