我使用$_GET['id']
来获取id并在db中查找。
我的印象是,如果我使用is_numeric
函数来检查字符串是否为数字,那么我不必使用mysqli_real_escape_string
来转义输入。但最近发现了这个。
查找给定变量是否为数字。数字字符串组成 可选符号,任意位数,可选小数部分和 可选的指数部分。因此+ 0123.45e6是有效的数值。 十六进制(例如0xf4c3b00c),二进制(例如0b10100111001),八进制 (例如0777)也允许表示法,但只有没有符号,小数和 指数部分。 参考:http://php.net/manual/en/function.is-numeric.php
所以我的问题是 我是否必须使用mysqli_real_escape_string转义输入,即使我使用is_numeric检查它以防止sql注入?
因为输入将只是数值,例如。 555,222,456,879
答案 0 :(得分:3)
虽然我无法想出一个特定的方法来攻击你的榜样,但我不能想到一种方式" !="不可能"。
如果你养成了检查,然后传递价值的习惯,最终你会陷入麻烦!
您的陈述"输入将只是数字值,例如。 555,222,456,879和#34;显然不是真的,因为你在报价中给出了一些更复杂的例子 - SQL如何处理+ 0123.45e6或0b10?包含数字的字符串与数字不同。
出于这个原因,总是 USE PREPARED 声明 - 这样你就不必担心它。 +1到@Ohgodwhy。
如果你能找到不使用准备好的陈述的理由(而且我认为没有准备好的陈述!)那么就说吧。