当前位置: 首页 > 面试题库 >

bind_param()仅对用户输入的值或全部必需?

屠锦
2023-03-14
问题内容

我一直在阅读SQL注入,但是找不到这个问题的答案。

我了解我是否需要这样的查询

prepare("SELECT id, foo, bar FROM table WHERE username = ?");

然后,我应该使用bind_param('s', $username)以避免SQL注入的可能性。

但是,如果我对不是用户输入的东西(例如自动生成的ID)运行查询,该怎么办?例子:

prepare("SELECT username, foo, bar from table where id = ?");

id是自生成的(自动增加的值)。我是否也必须利用bind_param('i', $id)这里,还是可以将查询准备为:

prepare("SELECT username, foo, bar from table where id = '$id'");

如果bind_param();需要,为什么?

谢谢!


问题答案:

从技术上讲,如果您不准备并非来自用户输入的数据,则不会面临任何风险。但是,强烈建议您这样做,原因有两个:

  1. 如果您忘记在某处准备任何用户输入数据,则该用户很有可能会将杂项注入到您从未希望成为用户输入的数据行中。
  2. 重复html" target="_blank">执行您的操作以确保服务器安全的做法是个好习惯。如果您开始对其进行混合,那么您很可能会忘记在实际需要的地方准备数据。
  3. 准备数据不仅是为了防止攻击者进行SQL注入。如果您不小心在代码中创建了错误,它还可以防止某些数据库问题。例如:

在代码中的某个位置,您有一个日志系统,该日志系统将错误日志添加到数据库中。该字符串将是:

错误:IP为“ xxxx”的用户“ xxx”使用了错误的密码。

该字符串由您的脚本生成。因此,您无需准备。但是,此字符串中的引号将导致数据库错误,如果您仍然准备数据库,则可以避免该错误。



 类似资料:
  • 问题内容: 我试图通过限制用户可以输入的内容来使用户输入不使程序崩溃,例如: 只是一个int 在1到30之间 我编写的代码只能在一定程度上起作用。如果您输入的内容不是整数,它将对其进行检查并要求您再次输入。如果您继续输入除int以外的任何内容,则再次输入。我还有另一个while循环,如果它确实输入一个int,并且它在1-30区域之外,则它将要求用户再次输入。但是,此后,如果用户键入另一个“除int

  • 我有疑问,请告诉我如何进行。下面的图片,你可以看到有两个领域称为销售价格和购买价格,我想在那里只输入这些领域的十进制值请告诉我如何做到这一点 在此处输入图像描述 谢谢你

  • 我需要使用Python程序来计算一些东西并得到结果。这个Python程序需要一个很长的输入,所以我无法在调用该Python程序时将其作为参数传递。 这个问题我就简化一下。下面是一个等待用户输入并打印用户输入的Python程序。我想用Java来完成输入并得到Python程序打印的结果。 我尝试使用和来编写字符串,但两者似乎都不起作用。 这是我尝试到目前为止从Java进程与输入/输出流学习的代码:。

  • 问题内容: 我有使用验证的表单字段。问题在于,呈现表单时会立即显示错误。我只希望在用户实际在文本字段中键入或提交后才显示它。 我该如何实施? 问题答案: 仅在用户与输入交互后,使用标志显示错误: 如果仅在用户提交表单后才想触发错误,则可以使用单独的标志变量,如下所示: 然后,如果表达式内的所有JS 看上去对您来说太多了,您可以将其抽象为一个单独的方法:

  • 我有一个扫描仪,它读入字符串作为坐标输入。我必须将这些字符串转换成整数,并将它们存储在坐标的Arraylist中,但我输入的最后一个值没有存储在Arraylist中。 我尝试在for-loop之外使用,但仍然没有变化。在存储和解析字符串时,我也尝试使用while循环而不是for循环,但得到了相同的结果。 预期结果: 点:[1,2,3,4] 实际结果 点:[1,2]

  • 问题内容: 我的作业很困惑。我必须编写一个程序,允许用户输入要购买的鸡蛋数量。然后,程序将告诉他们可以装多少盒(六个鸡蛋),还剩下多少个鸡蛋。 我需要确保如果用户输入非整数值,将显示错误消息。我不知道该怎么做,任何帮助将不胜感激!是与while循环有关还是我完全错了? 问题答案: 让用户输入他想要的任何内容,并仅在它不是整数时发出警告: 这毕竟是Python的方式,毕竟这是“请求宽容比允许更容易”