相关疑难解决方法(0)

避免不带参数的SQL注入

我们正在讨论在我们的代码中使用参数化sql查询的另一个讨论.我们在讨论中有两个方面:我和其他一些人说我们应该总是使用参数来防止sql注入以及其他不认为有必要的人.相反,他们想要在所有字符串中用两个撇号替换单撇号以避免sql注入.我们的数据库都在运行Sql Server 2005或2008,我们的代码库运行在.NET framework 2.0上.

让我在C#中给你一个简单的例子:

我希望我们使用这个:

string sql = "SELECT * FROM Users WHERE Name=@name";
SqlCommand getUser = new SqlCommand(sql, connection);
getUser.Parameters.AddWithValue("@name", userName);
//... blabla - do something here, this is safe
Run Code Online (Sandbox Code Playgroud)

而其他人想要这样做:

string sql = "SELECT * FROM Users WHERE Name=" + SafeDBString(name);
SqlCommand getUser = new SqlCommand(sql, connection);
//... blabla - are we safe now?
Run Code Online (Sandbox Code Playgroud)

SafeDBString函数定义如下:

string SafeDBString(string inputValue) 
{
    return "'" + inputValue.Replace("'", "''") + "'";
}
Run Code Online (Sandbox Code Playgroud)

现在,只要我们在查询中的所有字符串值上使用SafeDBString,我们就应该是安全的.对?

使用SafeDBString函数有两个原因.首先,它是自石头老化以来完成的方式,其次,由于您看到在数据库上运行的精确查询,因此更容易调试sql语句.

那么.我的问题是使用SafeDBString函数是否真的足以避免sql注入攻击.我一直试图找到破坏这种安全措施的代码示例,但我找不到任何示例.

那里有人可以打破这个吗?你会怎么做?

编辑: 总结到目前为止的答复:

  • 没有人找到办法在Sql Server 2005或2008上绕过SafeDBString.我觉得这很好吗? …

c# sql-server asp.net sql-injection

108
推荐指数
7
解决办法
2万
查看次数

什么是SQL注入?

可能重复:

如何从"Bobby Tables"XKCD漫画中注入SQL?
https://stackoverflow.com/search?q=sql+injection

有人可以解释SQL注入吗?它是如何导致漏洞的?注入SQL的确切位置在哪里?

sql security sql-injection

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

什么是传递参数到SQL,为什么我需要它?

初学者:

在我对如何将数据插入SQL Server的问题的答案中,他提到了传递参数而不是像我目前所拥有的字符串连接.

这对安全来说真的有必要吗?如果是这样,究竟是什么传递参数?当我谷歌它我得到很多关于存储过程.这就是我想要的,我不知道存储过程....

如果你能指出我正确的方向,我将不胜感激.

谢谢.

编辑:

好的,这就是我得到的.它似乎正确地更新了数据库,最终我将硬编码的int更改为标签的输入.请确认我是如何做到这一点不容易受到任何SQL注入或攻击.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;



public partial class Stats : System.Web.UI.Page
{

    public SqlDataReader DataReader;
    public SqlCommand Command;
    string queryString = ("INSERT INTO UserData (UserProfileID, ConfidenceLevel, LoveLevel, HappinessLevel) VALUES (@UID, @CL, @LL, @HL);");
    //string queryString = ("INSERT INTO UserData (UserProfileID, ConfidenceLevel, LoveLevel, HappinessLevel) VALUES ('a051fc1b-4f51-485b-a07d-0f378528974e', 2, 2, 2);"); 

    protected void Page_Load(object sender, EventArgs e)
    { …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server asp.net stored-procedures

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

ADOdb中的SQL注入和一般网站安全性

我已经做了很多阅读,但仍然不理解100%SQL注入的发生方式!

我想从那些知道基于我的例子的SQL注入的具体例子中看到它,因此它可以被复制,测试和修复.我试过SQL注入我的代码而不能,所以我希望有人来证明我的意思!

1.我认为SQL注入只能通过POST或GET方法进行,这意味着在网站上它应该是帖子形式,例如'注册或搜索'或查询如'search.php?tags = love'?

说这可以注入以下具有POST方法的代码吗?

$name     = trim($_POST['username']);
$mail     = trim($_POST['email']);
$password = trim($_POST['password ']);

   if ($errors == "false") {
    $sql = 
        "INSERT INTO 
           clients 
         SET 
           name='" . mysql_real_escape_string($name) . "',
           mail='" . mysql_real_escape_string($mail) . "', 
           password='" . mysql_real_escape_string(sha1($password)) . "'";
           $connection->execute($sql);

    }
Run Code Online (Sandbox Code Playgroud)

2.另一个有GET方法: rate.php?like&videoID=250&userID=30

$sql = 
    "SELECT 
        videoID 
     FROM 
        likes 
     WHERE 
        videoID = '" .mysql_real_escape_string($videoID). "' AND UID = '" .mysql_real_escape_string($userID). "' LIMIT 1";
        $connection->execute($sql);
Run Code Online (Sandbox Code Playgroud)

请帮助那些对主题感到自由的人,但请使用具体的例子.

提前谢谢,
伊利亚

php mysql security sql-injection adodb

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

即使在 .NET 中使用 SQLParameter 也存在 SQL 注入示例?

我听说当对 SQL Server 使用 ADO.NET SQLParameter(参数化查询)时,仍然可以进行 SQL 注入。

我正在寻找 C#/VB 代码中的真实示例作为证据。

编辑:我正在寻找具体的工作示例。没有介绍 sql 注入或如何防止它。

.net sql sql-server ado.net

5
推荐指数
1
解决办法
7095
查看次数

从什么sql参数保护你?

参数用于保护您免受恶意用户输入.

但是如果参数需要一个字符串,是否可以编写将被解释为sql的输入,因此恶意用户可以使用"DROP","TRUNCATE"等内容......?

asp,asp.net,java等参数之间的保护是否存在差异?


另请参阅:参数是否足以阻止SQL注入?

sql database security parameters

3
推荐指数
2
解决办法
2120
查看次数

使用参数而不是连接的好处

我是ASP.NET和C#编程的新手.

我想知道在SQL语句中使用参数而不是连接有什么区别和优点加上缺点,因为我听说这是防止SQL注入的更好方法(?)

下面是我使用串联更改为参数的示例INSERT语句:

级联:

string sql = string.Format("INSERT INTO [UserData] (Username, Password, ...) VALUES ('" + usernameTB.Text + "', '" + pwTB.Text + "',...);
Run Code Online (Sandbox Code Playgroud)

参数:

cmd.CommandText = "INSERT INTO [UserData] (Username, Password, ...) VALUES (@Username, @Password, ...)";

cmd.Parameters.AddWithValue("Username", usernameTB.Text);
cmd.Parameters.AddWithValue("Password", pwTB.Text);
Run Code Online (Sandbox Code Playgroud)

提前感谢您提供的任何知识.

c# sql asp.net sql-injection

3
推荐指数
1
解决办法
2903
查看次数

替换字符串中的撇号

我有两个数据库。一种在像 O'Bannon 这样的名字中有撇号,而另一种则没有。我需要合并它们并找到重复项。由于添加撇号更难,我正在尝试将其删除

但是这个...

UPDATE Client
SET Last_Name = REPLACE(''','')
Run Code Online (Sandbox Code Playgroud)

显然行不通。如何摆脱'.

我正在使用 Xojo(不是 PHP)

mysql

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

AddWithValue sql注入安全吗?为什么?

我希望这是一个正确的问题,parameters.addwithvalue工作怎么样?我正在考虑防止SQL注入?我一直在Stackoverflow上看很多,很多人说"//反对sql注入".我一直在盲目地使用它,但现在我必须提交一份关于我的任务的文章,我需要解释为什么它是保护.我一直试图在MSDN上找到一些东西,找到了这个:

SQL注入但它使用了parameters.add.然后我读到他们替换.Add.AddWithValue,是真的吗?那么任何官员呢?

所以基本上,任何人都可以更好地搜索一些可以防止SQL注入的官方文书工作?或者可以告诉我它是如何工作的?

我不是想让你做我的工作,我只是找不到自己.

我这样使用它:

using (SqlConnection conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
        conn.Open();
        String queryString = "DELETE FROM dbo.SecurityAccess WHERE Username = ' @Username ";
        cmd.CommandText = queryString;
        cmd.Parameters.AddWithValue("@Username", Username);
        cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

c# sql

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

动态SQL是否更容易受到SQL注入/黑客攻击?

动态SQL是否更容易受到SQL注入/黑客攻击?如果是,如何预防?

sql-server

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

MySQL上SQL注入安全性的最佳解决方案是什么?

运行我的字符串以确保MySQL注入不可能的最佳功能是什么?

此外,它是否需要在出路时通过另一个功能运行它才能使其正确显示?

也可以看看

参数真的足以阻止Sql注入吗?
C#参数化查询MySQL with inclause
我可以通过使用单引号转义单引号和周围用户输入来防止SQL注入吗?

mysql security sql-injection

0
推荐指数
1
解决办法
1828
查看次数