标签: parameterized-query

当参数不是字符串时,不参数化SQL查询是否安全?

SQL注入方面,我完全理解参数化string参数的必要性; 这是本书中最古老的技巧之一.但什么时候可以证明参数化SqlCommand?是否认为任何数据类型不安全参数化?

例如:我不认为自己在SQL专家附近,但我不能想到任何可能容易受到SQL注入接受a bool或an int并且只是将其连接到查询中的情况.

我的假设是正确的,还是可能在我的程序中留下一个巨大的安全漏洞?

为了澄清,这个问题被标记为,这是一种强类型语言; 当我说"参数"时,想一想 public int Query(int id).

c# sql sql-injection sqlcommand parameterized-query

113
推荐指数
9
解决办法
9160
查看次数

参数化查询如何帮助SQL注入?

在查询1和2中,文本框中的文本都插入到数据库中.这里参数化查询的意义是什么?

1.> -------------

SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
Run Code Online (Sandbox Code Playgroud)

2.> --------------

int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
Run Code Online (Sandbox Code Playgroud)

此外,在这里我将使用正则表达式验证来停止插入非法字符.

.net c# sql sql-server-2005 parameterized-query

52
推荐指数
4
解决办法
4万
查看次数

什么是参数化查询?

什么是参数化查询,这样的查询示例在PHP和MySQL中会是什么?

php sql parameterized-query

24
推荐指数
3
解决办法
6万
查看次数

Python中预准备语句和参数化查询之间的混淆

据我所知,预备语句(主要)是一个数据库功能,允许您将参数与使用此类参数的代码分开.例:

PREPARE fooplan (int, text, bool, numeric) AS
    INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
Run Code Online (Sandbox Code Playgroud)

参数化查询替代手动字符串插值,因此不是这样做

cursor.execute("SELECT FROM tablename WHERE fieldname = %s" % value)
Run Code Online (Sandbox Code Playgroud)

我们可以做的

cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])
Run Code Online (Sandbox Code Playgroud)

现在,似乎准备好的语句大部分都用在数据库语言中,参数化查询主要用于连接数据库的编程语言,尽管我已经看到了这个规则的例外.

问题在于询问预准备语句和参数化查询之间的区别会带来很多混乱.他们的目的无疑是相同的,但他们的方法似乎是截然不同的.然而,有消息表明两者都是相同的.MySQLdb和Psycopg2似乎支持参数化查询,但不支持预处理语句(例如,这里是MySQLdb和postgres驱动程序TODO列表或sqlalchemy 组中的这个答案).实际上,有一个实现psycopg2游标的要点,支持准备好的语句和关于它的最小解释.还有一个建议是在psycopg2中继承游标对象以手动提供准备好的语句.

我想得到以下问题的权威答案:

  • 预准备语句和参数化查询之间是否存在有意义的区别?这在实践中是否重要?如果使用参数化查询,是否需要担心预处理语句?

  • 如果存在差异,Python生态系统中预准备语句的当前状态是什么?哪些数据库适配器支持预处理语

python database sql-injection prepared-statement parameterized-query

20
推荐指数
2
解决办法
1万
查看次数

如何通过参数化查询在数据库中插入空值

我有一个datetime数据类型:dttm

数据库字段类型也是 datatime

现在我这样做:

if (dttm.HasValue)
{
    cmd.Parameters.AddWithValue("@dtb", dttm);
}
else
{
    // It should insert null value into database
    // through cmd.Parameters.AddWithValue("@dtb", _____)
}
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点.

c# sql datetime insert parameterized-query

15
推荐指数
2
解决办法
1万
查看次数

如何在ADO.NET中将"DEFAULT"指定为SQL参数值?

我有一个针对SQL2005的参数化SQL查询,它是在代码中动态创建的,所以我使用ADO.NET SqlParameter类来添加sql参数SqlCommand.

在前面提到的SQL中,我从具有默认值的表值函数中进行选择.我希望我的动态sql有时为这些默认参数指定一个值,有时我想指定应该使用SQL DEFAULT- 如表值函数中定义的那样.

为了保持代码清洁,我不想动态添加SQL DEFAULT关键字并在使用非默认值时对其进行参数化,我只想将其设置DEFAULT为my的值SQLParameter.

我可以吗?在这种情况下,最佳做法是什么?

sql t-sql ado.net parameterized-query

14
推荐指数
2
解决办法
8711
查看次数

批量参数化插入

我正在尝试切换一些硬编码查询以使用参数化输入,但我遇到了一个问题:如何格式化参数化批量插入的输入?

目前,代码如下所示:

$data_insert = "INSERT INTO my_table (field1, field2, field3) ";
$multiple_inserts = false;
while ($my_condition)
{
    if ($multiple_inserts)
    {
        $data_insert .= " UNION ALL ";
    }

    $data_insert .= " SELECT myvalue1, myvalue2, myvalue3 ";
}

$recordset = sqlsrv_query($my_connection, $data_insert);
Run Code Online (Sandbox Code Playgroud)

一个潜在的解决方案(从如何将数组插入到PHP和PDO的单个MySQL Prepared语句中修改)似乎是:

$sql = 'INSERT INTO my_table (field1, field2, field3) VALUES ';
$parameters = array();
$data = array();
while ($my_condition)
{
    $parameters[] = '(?, ?, ?)';
    $data[] = value1;
    $data[] = value2;
    $data[] = value3;
}

if (!empty($parameters)) …
Run Code Online (Sandbox Code Playgroud)

php sql bulkinsert parameterized-query

10
推荐指数
1
解决办法
6171
查看次数

PDO参数化查询的工作方式

请仔细阅读问题.这通常不是愚蠢的"我的代码不起作用!!!" 题.

当我使用预期的错误运行此代码时

try {
  $sth = $dbh->prepare("SELECT id FROM users WHERE name INN(?,?) ");
  $sth->execute(array("I'm","d'Artagnan"));
} catch (PDOException $e) {
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

您的SQL语法中有错误...在第1行'INN('我'','d \'Artagnan')'附近

但我多年来一直认为查询和数据是分开发送给服务器的,而且绝不干涉.因此我有一些问题(虽然我怀疑有人得到答案......)

  1. 它在哪里获得如此熟悉的字符串表示 - 引用和转义?它是否特别报告错误或是否是实际查询的一部分?
  2. 它是如何在真实中起作用的?它是否用占位符代替数据?
  3. 有没有办法获得整个查询,而不仅仅是一点点,用于调试目的?

更新

mysqli 是按预期做的:它会抛出一个错误说 near 'INN(?,?)'

php pdo parameterized-query

8
推荐指数
2
解决办法
780
查看次数

如果我为不存在的参数调用ParamByName会发生什么?

我对Delphi很新,并收到了以下代码(省略了一些不相关的部分),我正试图了解它的作用:

object SelectCosts: TIBQuery
    SQL.Strings = (
      'SELECT * FROM costs '
      'WHERE code = :code')
    ParamData = <
      item
        DataType = ftUnknown
        Name = 'code'
        ParamType = ptUnknown
      end>
  end
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,使用该查询,但添加了未在查询中定义的参数.

DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Run Code Online (Sandbox Code Playgroud)

此参数是否会'part'改变所做的选择?换句话说:SQL查询是否自动更改为以下内容?

'SELECT * FROM costs '
  'WHERE code = :code'
  'AND part = :part'
Run Code Online (Sandbox Code Playgroud)

delphi parameterized-query

8
推荐指数
2
解决办法
4536
查看次数

如何使用列作为参数在Excel中使用参数化查询?

我正在尝试开发一个可以在外部数据源中找到相应记录的电子表格.所以,假设我的列A带有一个标识值列表.我想开发B列,它可能会显示表中具有该值的行数.就像是:

A              B
758348    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$1"
173483    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$2"
Run Code Online (Sandbox Code Playgroud)

... 等等.所以,我以为我会使用参数化查询(其中IDVALUE =?),但这会提示我输入参数值,而不是使用左边单元格中的值.有什么方法可以做到这一点吗?

excel parameterized-query excel-external-data

8
推荐指数
1
解决办法
6万
查看次数