我们都知道准备好的语句是抵御SQL注入攻击的最好方法之一.使用"IN"子句创建预准备语句的最佳方法是什么.是否有一种简单的方法可以使用未指定数量的值来执行此操作?以下面的查询为例.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
目前我正在使用一个循环覆盖我的可能值来构建一个字符串,如.
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (@IDVAL_1,@IDVAL_2,@IDVAL_3)
Run Code Online (Sandbox Code Playgroud)
是否可以使用只传递数组作为查询参数的值并使用如下查询?
SELECT ID,Column1,Column2 FROM MyTable WHERE ID IN (@IDArray)
Run Code Online (Sandbox Code Playgroud)
如果重要的是我在VB.Net中使用SQL Server 2000
t-sql vb.net language-features sql-injection sql-server-2008
我看过几篇关于L2E是否容易受到SQL注入影响的文章.
来自MSDN:
尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.
这是否意味着存在可能有效的"非传统"攻击? 本文有一个非参数化查询的例子 - 可以安全地假设,如果通过变量传入用户提供的数据,它将被参数化吗?
如果我做:
from foo in ctx.Bar where foo.Field = userSuppliedString select foo;
Run Code Online (Sandbox Code Playgroud)
我安全吗?
昨天我和一个开发人员交谈,他提到了一些关于限制数据库字段插入的事情,比如,--(减去负数)等字符串.
在同类型的,我知道的是,是逃避HTML字符是一个不错的办法<,>等不--.这是真的?我担心--,++?它更像是神话还是旧东西?
非常感谢所有答案,这很容易理解,因为我对这一切都是新手.好吧,在这种情况下更具体一点,我们的讨论是关于和我们正在开发的C#ASP.NET MVC网站,因此有一个复杂的开放帐户表单中有重要信息,所以我不确定MVC是否使用Linq来与数据库的接口是否已经带有这种保护.所以如果有人能提供一些关于它的提示,那就太好了.再次感谢
我在"过滤输入,转义输出"之前读过这个,但是当我在PHP上使用PDO时,真的需要过滤输入吗?我认为使用PDO我不需要过滤输入,因为准备好的语句负责sql注入.我认为"转义输出"仍然有效,但"过滤输入"仍然有效吗?
我想知道是否有可能只需my_sql_escape字符串整个$ _POST和$ _GET数组,所以你不会错过任何变量?
不知道如何测试它或我会自己.谢谢!
应该如何用phpunit php web应用程序测试xss + sql注入?我想找到输出xss +其他攻击的程序来测试我的应用程序表单.应该使用新的xss和其他新攻击随时更新此程序/服务.是否存在此类服务/程序,如果不是今天如何完成?如果可以,请举一些例子.
(我使用php 5.3 + zend framework + mysql)
编辑:
我询问测试!而不是阻止我也知道的技术.
谢谢,
优素福
我一直在阅读有关SQL注入的内容,我想确保我的代码可以说是"安全",我打算使用RegExp验证器来检查用户输入,但是这里的另一个帖子建议只使用参数化查询,我我正在使用它们,但我想确保我的代码是安全的,是吗?
using ( SqlConnection dataConnection = new SqlConnection(myConnectionString) )
{
using ( SqlCommand dataCommand = dataConnection.CreateCommand() )
{
dataCommand.CommandText = "INSERT INTO Lines (Name, CreationTime) " +
"VALUES (@LineName, @CurrentDateTime)";
dataCommand.Parameters.AddWithValue("@LineName", TextBox2.Text);
dataCommand.Parameters.AddWithValue("@CurrentDateTime", DateTime.Now.ToString());
dataConnection.Open();
//do other DB stuff
Run Code Online (Sandbox Code Playgroud)
我打破了最后一部分以使帖子更短,其余部分只是尝试捕获异常并关闭数据库连接以及提供用户关于插入成功的反馈.
在我们的数据库访问层中,我们有一些动态查询创建.例如,我们有以下方法来构建ORDER BY子句的一部分:
protected string BuildSortString(string sortColumn, string sortDirection, string defaultColumn)
{
if (String.IsNullOrEmpty(sortColumn))
{
return defaultColumn;
}
return String.Format("{0} {1}", sortColumn, sortDirection);
}
Run Code Online (Sandbox Code Playgroud)
问题是,sortColumn并且sortDirection都来自外部作为字符串,因此当然应该采取措施来防止可能的注入攻击.有没有人知道如何做到这一点?
我正在使用Hibernate保护我的网站免受SQL注入.
我听说Hibernate Criteria API比HQL更强大.Hibernate Criteria Api是否完全防止SQL注入?
java hibernate sql-injection criteria-api hibernate-criteria
我们有大量依赖动态SQL的SQL Server存储过程.
存储过程的参数用于动态SQL语句中.
我们需要在这些存储过程中使用标准验证函数来验证这些参数并防止SQL注入.
假设我们有这些约束:
我们无法重写不使用动态SQL的过程
我们不能使用sp_OACreate等来使用正则表达式进行验证.
在将参数传递给存储过程之前,我们无法修改调用存储过程的应用程序来验证参数.
是否有一组字符我们可以过滤掉以确保我们不会受到SQL注入的影响?
sql-server validation stored-procedures sql-injection dynamic-sql
sql-injection ×10
php ×3
c# ×2
security ×2
sql ×2
xss ×2
.net ×1
asp.net ×1
criteria-api ×1
database ×1
dynamic-sql ×1
escaping ×1
hibernate ×1
java ×1
mysql ×1
pdo ×1
phpunit ×1
protection ×1
sql-order-by ×1
sql-server ×1
t-sql ×1
validation ×1
vb.net ×1