相关疑难解决方法(0)

参数真的足以阻止Sql注入吗?

我一直在向我的同事们讲道,在这里谈论在SQL查询中使用参数的好处,特别是在.NET应用程序中.我甚至承诺给予他们免受SQL注入攻击的抵抗力.

但我开始怀疑这是否真的如此.是否有任何已知的SQL注入攻击可以成功对抗参数化查询?例如,您可以发送一个导致服务器缓冲区溢出的字符串吗?

当然还有其他考虑因素可以确保Web应用程序是安全的(比如清理用户输入和所有内容),但现在我正在考虑SQL注入.我对MsSQL 2005和2008的攻击特别感兴趣,因为它们是我的主要数据库,但所有数据库都很有趣.

编辑:澄清参数和参数化查询的含义.通过使用参数我的意思是使用"变量"而不是在字符串中构建SQL查询.
所以不要这样做:

SELECT * FROM Table WHERE Name = 'a name'
Run Code Online (Sandbox Code Playgroud)

我们这样做:

SELECT * FROM Table WHERE Name = @Name
Run Code Online (Sandbox Code Playgroud)

然后在查询/命令对象上设置@Name参数的值.

sql database asp.net sql-injection

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

什么是传递参数到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万
查看次数