bind_param() 仅对用户输入的值有用还是全部?

2023-12-03

我一直在阅读 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'");

If bind_param();需要,为什么?

Thanks!


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

  1. 如果您忘记在某处准备任何用户输入数据,则该用户有可能会向数据行中注入一些您不希望成为用户输入的内容。
  2. 重复您正在执行的操作以确保服务器安全是一个很好的做法。如果您开始将其混淆,您很可能会忘记在实际需要的地方准备数据。
  3. 准备数据不仅仅是为了防止攻击者进行 SQL 注入。如果您不小心在代码中创建了错误,它还可以防止出现一些数据库问题。例如:

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

错误:IP“x.x.x.x”的用户“xxx”使用了错误的密码。


该字符串由您的脚本生成。因此你不准备它。然而,该字符串中的引号将导致数据库出现错误,如果您无论如何都准备了该错误,则可以避免这种错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bind_param() 仅对用户输入的值有用还是全部? 的相关文章

随机推荐

  • 数组:每个键存储多个值

    我曾经尝试使用相同的键添加两个值 但它不起作用 它超越了旧的价值 是否可以使用相同的键添加多个值 并且在按键检索时 我会得到一个链接列表 我可以迭代该列表以获取所有不同的值 最简单的选择 无论您使用什么地方 array key 替换为 ar
  • Python:获取 URL 路径部分

    如何从 url 获取特定路径部分 例如 我想要一个对此进行操作的函数 http www mydomain com hithere image 2934 并返回 这里 或对此进行操作 http www mydomain com hithere
  • Azure 移动服务 Web Api 上的 SignalR CORS

    我有一个运行 Web Api 和 c 的 Azure 移动服务 并按照中的建议启用了 CORS在 Azure 移动服务 NET 后端启用 CORS然而我现在开始将 SignalR 添加到其中 SignalR 工作正常 但我无法找到如何启用
  • 触发器中的 pragmaautonomous_transaction

    我在一个表上编写了一个触发器 该触发器根据条件从其他表中删除数据 触发器具有 pragmaautonomous transaction 并且触发器按预期工作 但是 我确实想知道将来是否会出现任何问题 比如说数据是否由多个用户 源同时插入等等
  • 防止 D3 中的文本剪切(Javascript 图表)

    我正在 D3 中绘制饼图 但文 本剪辑本身遇到问题 这是我的绘图函数 pie function config var width config width 840 height config height 520 radius Math m
  • jQuery mobile:URL 查询字符串不改变

    我正在使用 jQuery Mobile 并遇到了一些 对我来说 奇怪的行为 我有一堆链接 每个链接都指向同一个 jQM 页面 otherpage 但 URL 查询字符串具有不同的值 例如 otherpage q foo otherpage
  • 如何检测 RichTextBox 中的多行粘贴

    目前我正在开发一个简单的语法荧光笔 但有几个问题 你能帮我一下吗 我有一个类库 其中有一个组件类 一切都在 VB NET 中 这只是一个文件 所以你可以在这里看到它https gist github com 2366507 第 92 行有
  • php hook 核心函数

    我想在执行 或替换标准核心函数之前挂钩 例如我要阻止这两者include and require访问任何脚本 有什么方法可以在没有任何额外的 dll 的情况下实现它吗 或者另一个案例is array myarr 我会勾住array myar
  • Swing 重叠组件

    我在框架中有两个 AWT 组件 面板 A 和面板 B 我希望面板 A 的大小适合框架的高度宽度 并在调整框架大小时保持该大小 但我希望面板 B 与 A 重叠 B 将处于固定位置 0 0 以使其更容易 具有固定的高度和宽度 我不确定需要什么样
  • 实例化一个派生自 MonoBehaviour 的类[重复]

    这个问题在这里已经有答案了 有没有办法实例化从 MonoBehaviour 派生的类 例如下面的示例 而不会收到警告 您正在尝试使用 new 关键字创建 MonoBehaviour 这是不允许的 MonoBehaviours 只能使用 Ad
  • 如何删除/切换元素上的悬停类(单击时翻译)而无需再次移动鼠标?

    如果您单击但不移动鼠标 您将看到按钮的颜色保持为红色 我想要完成的是在您单击并且不移动鼠标后它仍然会删除 切换 hover class jsFiddle 上的示例 function var Btn button Btn hover func
  • CosmosDB + 分组依据

    我需要使用 GROUP BY 条款Azure 数据资源管理器但我认为是不支持的 有人有解决或避免分组的想法吗 此致 最后 Azure Cosmos DB 目前支持GROUP BY在 NET SDK 3 3 或更高版本中 目前尚不支持其他语言
  • Twilio webhook 短信响应格式

    我在我的应用程序中使用 Twilio 并且我有 SMS Webhooks 其中我的 SMS 号码配置了 URL 一切正常 除了 Twilio 在每个请求的日志中向我发送错误 我认为我的应用程序的响应格式不正确 但我在文档中找不到如何使用 J
  • 扩展函数原型

    我希望能够扩展javascript中的函数原型 也就是说 向所有函数添加一个函数 目的是将其转换为一种格式 以便在另一种语言 即 ruby 它只能通过字符串进行通信 在这种特定设置中 之间进行交换 我已经有了一个系统 因此我可以通过定义一个
  • 在 iPhone SDK 中获取我所在位置的海拔高度(距海平面的高度)

    我正在尝试在我的应用程序中获取我所在位置的海拔高度 但每次我尝试altitude的财产CLLocation我得到的对象0 00结果 我用谷歌搜索我的查询 得到了类似的问题here and here 该链接表示 如果我通过 wifi 或手机信
  • 如何使用 JavaScript 打开带有打印对话框的文件

    我想使用 JavaScript 打开一个 Word 文档 并为该打开的文档窗口打开打印对话框 这是我的代码 window open http www tizaq com window print 它可以工作 但是打印对话框是为当前窗口打开的
  • 有什么方法可以使用 4 个点而不是 3 个点来绘制图像(透视扭曲)

    Graphics DrawImage 很好地支持绘制平行四边形 Bitmap destImage new Bitmap srcImage Width srcImage Height using Graphics gr new Graphic
  • Google App Engine app.yaml PHP 脚本参数

    在我的 GAE PHP app yaml 中 我尝试这样做 application myapp version 1 runtime php api version 1 threadsafe yes handlers url sitemap
  • 如何在 tkinter 中使无声异常变得更响亮?

    如果我从终端运行以下代码 我会在终端中收到一条有用的错误消息 import Tkinter as tk master tk Tk def callback raise UserWarning Exception b tk Button ma
  • bind_param() 仅对用户输入的值有用还是全部?

    我一直在阅读 SQL 注入 但找不到这个问题的答案 我明白如果我有这样的查询 prepare SELECT id foo bar FROM table WHERE username 那我应该使用bind param s username 以