防止 ASP.Net 中的 SQL 注入

2024-02-16

我有这个代码

UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ') 

我该如何防止 SQL 注入呢?

UPDATE

这就是我正在尝试的

SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref", con); 
cmd.Parameters.AddWithValue("@ref", 34);

由于某种原因,我尝试添加的所有内容似乎都不起作用,我不断收到SQL Command如以下所说的。

错误是这样的

'SqlCommand' is a type and cannot be used as an expression

我正在接管别人的工作,所以这对我来说是全新的,我希望以正确的方式做事,所以如果有人可以提供更多关于如何使我的查询免受 SQL 注入攻击的帮助,那么请这样做。

更新2号

我在代码中添加了 VasilP 所说的这样

Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"

但我收到一个错误Tools is not declared我是否需要指定某个名称空间才能使其工作?

UPDATE

有没有人知道如何最好地让我的查询免受 SQL 注入的影响,而又不会出现我遇到的错误?

UPDATE

我现在有了它,所以它可以在没有参数的情况下工作,这是我更新的源代码,知道为什么它不会添加参数值吗?

Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
   conn.Open()


Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = @investor ') ", conn)
query.Parameters.AddWithValue("@investor", 69836)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

它的工作原理是这样的

Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
   conn.Open()


Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = 69836') ", conn)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

我收到的错误是这样的

An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'. 

这是因为它并没有取代@investor69836

有任何想法吗?

SOLUTION

这是我解决问题的方法

Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")

conn.Open()

Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

现在我可以编写查询而不必担心 SQL 注入


尝试使用参数化查询 http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/这是一个链接http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/ http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

另外,不要使用 OpenQuery...使用 this 来运行选择

SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno

更多描述您的一些选择的文章:

http://support.microsoft.com/kb/314520 http://support.microsoft.com/kb/314520

连接到另一个 SQL Server 的 T-SQL 语法是什么? https://stackoverflow.com/questions/125457/what-is-the-t-sql-syntax-to-connect-to-another-sql-server


Edited

注意:您最初的问题是询问分布式查询和链接服务器。这个新语句不引用分布式查询。我只能假设您现在直接连接到数据库。这是一个应该有效的示例。 这是另一个使用参考站点SqlCommand.参数 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref", con); 
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;

Edited:

好吧,杰米·泰勒,我会再次尝试回答你的问题。

您正在使用 OpenQuery 因为您可能正在使用链接数据库

基本上,问题是 OpenQuery 方法采用一个字符串,您无法将变量作为发送到 OpenQuery 的字符串的一部分传递。

您可以像这样格式化您的查询。符号遵循服务器名称.数据库名称.架构名称.表名称。如果您通过 odbc 使用链接服务器,则省略数据库名称和架构名称,如下所示

    Dim conn As SqlConnection = New SqlConnection("your SQL Connection String")
    Dim cmd As SqlCommand = conn.CreateCommand()
    cmd.CommandText = "Select * db...table where investor = @investor"
    Dim parameter As SqlParameter = cmd.CreateParameter()
    parameter.DbType = SqlDbType.Int
    parameter.ParameterName = "@investor"
    parameter.Direction = ParameterDirection.Input
    parameter.Value = 34
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 ASP.Net 中的 SQL 注入 的相关文章

  • SQL查询中的Python列表作为参数[重复]

    这个问题在这里已经有答案了 我有一个 Python 列表 比如说 l 1 5 8 我想编写一个 SQL 查询来获取列表中所有元素的数据 例如 select name from students where id IN THE LIST l
  • Razor 与 ASPX 语法的比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近 我开始研究 MVC3 和 Razor 并阅读了几篇有关这些主题的文章 以更好地理解这个概念 我一直在读Scott Guthrie 的博客文
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • 在大表上快速使用 LIMIT 和 OFFSET 进行 SELECT

    我的表中有超过 1000 万条记录 SELECT FROM tbl ORDER BY datecol DESC LIMIT 10 OFFSET 999990 输出EXPLAIN ANALYZE on 解释 depesz com http e
  • appSettings 与 applicationSettings。应用程序设置已过时? [复制]

    这个问题在这里已经有答案了 我对在 web config 中保存设置的两种方法有一些疑问 应用程序设置 查看 web config
  • 处理多种权限类型的最佳方法是什么?

    我经常遇到以下场景 我需要提供许多不同类型的权限 我主要使用 ASP NET VB NET 和 SQL Server 2000 Scenario 我想提供一个可以处理不同参数的动态权限系统 假设我想授予某个部门或特定人员访问应用程序的权限
  • ASP.net,将对象添加到会话变量

    我正在尝试跨回发将对象添加到会话变量中 我的代码类似于以下内容 Supply sup Supplies GetSupply supplyItemID Session CartObjects sup 现在 编译器会抛出一个错误 指出 运算符不
  • 在 ASP .NET Core 2.1 Web Api 中启用 CORS

    我正在使用 ASP NET Core 2 1 Web API 和 React 编写应用程序 我的服务器位于 localhost 5000 上 客户端位于 localhost 3000 上 我想用 axios 发送 post 请求 但在浏览器
  • 需要在SQL Server 2012中自动递增字符串

    考虑 SQL Server 2012 中的表 789 0000000 上面的数字在 SQL Server 2012 中将被视为字符串 但每当我更新记录时 我都需要增加到 1 例如 当我更新记录 1 时 它应该增加到789 0000001 当
  • ACT by Sage 与 asp.net 集成 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 想知道这里是否有人可以提供帮助 我被要求开发一个 ASP Net 应用程序 它将直接连接 存储和检索 到 ACT 数据库已经正常运行
  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK
  • 如果用户可以解密 web.config,那么加密它有什么意义呢?

    哎呀 一些供应商告诉我的老板 不加密 web config 是一个很大的安全漏洞 这对我来说听起来像是废话 我的意思是 如果有人破坏了服务器 我们不是就完蛋了吗 就像 Joelt 所建议的那样 ASP NET 最近出现了一个安全问题 允许人
  • 如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

    我使用 OLE 通过 VB NET 连接到数据库 并在 DataGridView 中显示结果 我想将 DataGridView 中的数据导出到 Excel 格式文件 即用户可以将 DataGridView 的内容保存为 MS Excel 文
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • SQL:删除SQL Server中的重复记录

    我有一个 sql server 数据库 我预先加载了大量数据行 不幸的是 数据库中没有主键 并且表中现在存在重复信息 我不担心没有主键 但我担心数据库中有重复项 有什么想法吗 原谅我是一个sql server新手 嗯 这就是表上应该有主键的
  • 使用 Athena 从 AWS WAF 日志中的规则组列表获取终止规则

    我跟着这些说明 https docs aws amazon com athena latest ug waf logs html将我的 AWS WAF 数据放入 Athena 表中 我想查询数据以查找具有 BLOCK 操作的最新请求 此查询
  • 如何在 Elixir 的 Ecto 查询中使用“case-when”?

    我有一个 SQL 查询 例如 SELECT SUM CASE WHEN
  • 如何将事件处理程序添加到 VB.NET 中的局部变量

    我在 VB NET 中有一个窗体 用作主窗体中的对话框 它的实例始终是本地定义的 没有对应的字段 当用户单击对话框中的 确定 按钮时 它将触发一个只有一个参数的事件 即我的类之一的实例 由于它始终是局部变量 因此如何为该事件添加事件处理程序
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • 如何在Redshift中进行分层随机样本?

    我需要对从不同类别购买商品的客户进行随机抽样 有8个类别 订单分布在其中 如果我想对已购买的客户进行随机抽样 但保持每个类别的订单比例相同 我将如何在我的 sql 代码中进行设置 下面的表格强调了这一点 它不包括客户数据 我希望我的客户列表

随机推荐

  • 我应该如何将 redux 与不会重用的嵌套子组件一起使用?

    我正在开发一个具有许多子组件的组件 其中一些子组件嵌套了五层 我对使用 redux 感兴趣 因为它的优点是在公共状态原子中拥有单一的事实来源 我不明白的是智能 愚蠢组件的推荐 并将提供者置于主要组件之上 并通过道具传递所有内容 如果我这样做
  • gae 样板文档

    在为 App Engine 寻找一个好的社交登录包时 我尝试了 gae boilerplate 但我发现除了自述文件之外没有任何文档 我认为这根本不够 我有很多问题 其中包括 样板文件应该用作库还是根据需要下载并修改 样板应该如何更新 每个
  • Python yaml:ModuleNotFoundError

    我在 conda 中创建了一个新环境并在那里安装了 yaml conda list grep yaml yaml 0 1 7 had09818 2 但我无法导入它 python c import yaml Traceback most re
  • 如何构建微服务前端

    Let s say I have a dozen microservices I am wondering where should the front end go Let s say front end is HTML Javascri
  • 迭代时修改 Java8 流中的对象

    在 Java8 流中 我可以修改 更新其中的对象吗 例如 List
  • 如何纠正错误“从创建它的线程以外的线程访问”?

    下面的代码给了我下面的错误 我想我需要 InvokeRequired 但我不明白我该如何使用 跨线程操作无效 从创建它的线程以外的线程访问控制 listBox1 代码 using System Collections Generic usi
  • Eclipse 中不同的断点图标有何含义?

    在 Eclipse 中使用断点时 我有时会注意到它们有不同的图标 注释 左侧栏上的标记 有时它只是一个蓝色的球 有时上面有一个复选标记 有时它是十字形的 所有这些注释是什么意思 蓝色球 常规断点 活动 可能设置了命中计数 空球 即白色 断点
  • 使用 QuickCheck 测试一元法则

    是否有用于测试的库或工具laws https wiki haskell org Monad laws自定义 monad 的 我目前的黑客尝试是这样的 Define Arbitrary1 如同Eq1 Show1 etc 定义一个包装的辅助类型
  • laravel 私有通道和 laravel-echo-server 的身份验证问题

    我在 Laravel 5 5 中使用 laravel echo server 以及 Redis 和 vuejs 通过 websockets 广播事件 通过公共渠道 它工作正常 并且事件可以正确广播到客户端 但是当我将其更改为私有通道时 即使
  • 如何检查 Star Basic 中损坏的内部链接?

    我正在为 LibreOffice Writer 创建一个基本宏来检查损坏的内部链接 简而言之 生成所有锚点的列表 循环浏览文档 查找内部超链接 如果内部超链接不在锚点列表中 则打开它进行编辑 然后停止 我的代码有一些未解决的问题 withi
  • 语句包含 OUTPUT 子句但没有 INTO 子句错误

    我有一个触发器 它使用同一插入记录的身份主键 MessageId 的值更新插入的字段 RootId 之一 仅当插入记录的 RootId 字段为 0 时才应进行更新 触发器看起来像这样 ALTER TRIGGER dbo Trigger Ro
  • Google App Engine 应用程序可能消耗的最大内存是多少?

    最大金额是多少local记忆 notMemcache Google App 引擎应用程序的每个实例都可以使用吗 我找不到任何关于GAE 配额页面 http code google com appengine docs quotas html
  • Linq to SQL - 基础列长度

    我使用 Linq to SQL 一段时间了 我发现它非常有用且易于使用 对于我过去使用过的其他 ORM 工具 从数据库填充的实体对象通常有一个属性 指示数据库中基础数据列的长度 这在数据绑定情况下非常有用 例如 您可以在文本框上设置 Max
  • 如果我单击一个单元格,则需要在 Gsheet 中捕获电子邮件或姓名

    如果有人单击 Ay 列复选框 则需要在不同的列单元格中捕获他 她的电子邮件 您并不总是能够访问用户 唯一可以在单击上工作的触发器是 onSelectionChange 这是一个简单的触发器 这意味着它不能执行任何需要权限的操作 而 Sess
  • 如何创建空列表的列表

    如果之前已经回答过这个问题 我深表歉意 但我在这里找不到类似的问题 我对 Python 还很陌生 我想要创建的内容如下 list1 list2 results list1 list2 这段代码工作得非常好 但我想知道是否有一种更快的方法可以
  • 快速算法,精确查找二元矩阵中的 k 列,使这些列的总和为 1-向量

    假设我有一个 M x N 二进制矩阵 其中 M 和 N 都可以很大 我想精确地找到 k 列 k 相对较小 比如小于 10 这样这 k 列的总和就是 1 向量 所有元素均为 1 一种解决方案就足够了 有没有快速的算法 例如 处理矩阵的算法 1
  • 中心引导程序的品牌和列表项

    关于将 Twitter bootstrap 的品牌居中或将导航栏中的列表项居中存在几个问题 但我还没有弄清楚如何将两者居中 这是一个例子 用于修改twitter bootstrap导航栏 https stackoverflow com qu
  • 错误:日期/时间字段值超出范围:“30/12/2014 23:58:04”postgresql

    我正在尝试将 csv 文件导入 postgresql 数据库 我已经尝试过了set datestyle mdy copy Recon snapdeal sales REFERENCES ORDER CODE SUB ORDER CODE P
  • 如何在 pageInfo 中将总计数传递给客户端

    I use first after and last before进行分页 hasNextPage and hasPreviousPage非常有用 但我还需要的是total count这样我就可以计算并显示诸如page 5 of 343 p
  • 防止 ASP.Net 中的 SQL 注入

    我有这个代码 UPDATE OPENQUERY db SELECT FROM table WHERE ref Ref AND bookno Session number 我该如何防止 SQL 注入呢 UPDATE 这就是我正在尝试的 Sql