我试图证明 PHP 中准备好的语句的必要性,但我遇到了一些问题,因为 PHP 通过表单传递的字符串做了一些方便奇怪的事情。
我试图“打破”的陈述很简单:
SELECT username FROM users WHERE username = '$username' AND password = '$password'
但是像传递X' or TRUE;--
密码这样的操作实际上并不起作用,因为 PHP 会自动转义单引号并将语句转换为:
SELECT username FROM users WHERE username = '$username' AND password = 'X\' or TRUE;--'
由于转义的单引号,密码相等性保持不变。这种说法被认为是安全的吗?不然怎么破?