gpt4 book ai didi

c# - 防止 SQL 注入(inject),同时让用户在查询结束时输入自己的条件

转载 作者:行者123 更新时间:2023-11-30 20:22:28 25 4
gpt4 key购买 nike

在我的程序中,我有一个查询可以查看用户的联系人 信息。该表通常显示没有过滤器的所有行。我想添加一个选项,让用户在 SELECT 语句的末尾编写自己的条件,以查看他们需要的信息。因此,如果我的主要查询是这样的:

SELECT * FROM CONTACTS

用户可以写条件

WHERE FirstName LIKE '%Michael%'

在文本框中。

但是,我知道这不是很安全并且容易发生 SQL 注入(inject)。但是如何防止用户输入恶意命令,例如

WHERE 1=1; DROP TABLE Contacts

在文本框中?现在我正在对某些关键字进行检查,例如如果过滤器包含 DELETE、DROP、UPDATE 等,则查询将不会运行。但我认为这不是一个非常安全的解决方案。

最佳答案

允许用户在 {SQL} 查询结束时编写“他们自己的条件”,可能会在您的应用程序中产生安全漏洞,这将使其容易出现类似 SQL injection attack 的问题.

如果您仍想继续,请考虑以下几点:

  • 使用正则表达式将输入限制为最基本的形式(例如电话号码只允许 0-9 和连字符)
  • 在最低级别(即存储过程)实现您的保护机制
  • 对于存储过程中的动态查询...永远不要将字段名称传递给存储过程
  • 切勿以不必要的权限运行。
  • 使用自己的登录名登录应用程序的用户通常应该只对存储过程具有 EXEC 权限。
  • 如果您使用动态 SQL,则应将其限制为读取操作,以便用户只需要 SELECT 权限。
  • 登录数据库的网站不应具有任何提升的权限,最好只有 EXEC 和(可能)SELECT 权限。
  • 永远不要让网站以管理员身份登录!
  • 总是使用参数化语句。
  • 进行代码审查以检查二次攻击的可能性。
  • 确保错误消息不会泄露应用程序或数据库的内部架构。

再说一遍...实现时要非常、非常小心!

补充阅读

关于c# - 防止 SQL 注入(inject),同时让用户在查询结束时输入自己的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com