避免Sql注入攻击

2023-12-11

我有一个 ASP.NET 应用程序。其中我有这段代码:

 using (Data.connexion)
    {
        string queryString = @"select id_user , nom, prenom, mail, login, mdp, last_visite, id_group, id_user_status from USERS where login =@login and mdp=@mdp";
        SqlCommand command = new SqlCommand(queryString, Data.connexion);
        command.Parameters.AddWithValue("@login", _login);
        command.Parameters.AddWithValue("@mdp", _password.GetHashCode().ToString());
        try
        {
            SqlDataReader reader = command.ExecuteReader();
            do
            {
                while (reader.Read())
                {
                    return View("Success");
                }
            } while (reader.NextResult());

        }
        catch {  }
    }

当我尝试使用此登录进行 Sql 注入攻击时'' or 1=1 --,攻击失败。但如果我改变这个片段:

 using (Data.connexion)
            {
                string queryString = @"select id_user , nom, prenom, mail, login, mdp, last_visite, id_group, id_user_status from USERS where login =" + _login + " and mdp=" + _password.GetHashCode().ToString();
                SqlCommand command = new SqlCommand(queryString, Data.connexion);
              //  command.Parameters.AddWithValue("@login", _login);
               // command.Parameters.AddWithValue("@mdp", _password.GetHashCode().ToString());
                try
                {
                    SqlDataReader reader = command.ExecuteReader();
                    do
                    {
                        while (reader.Read())
                        {
                            return View("Success");
                        }
                    } while (reader.NextResult());

                }
                catch {  }
            }

我被重定向到视图success这样攻击就成功了。

这两种编码方式有什么区别?预防和避免 Sql 注入攻击的最佳方法是什么?


防止 SQL 注入的最佳方法是使用参数化查询。

You can将值连接到字符串时确保安全,但必须完全正确,并且具体方法因数据库品牌而异。

对于 SQL Server,您可以通过将字符串中的任何撇号加倍来对字符串值进行编码。这样,任何撇号都会被数据库正确解释,并且不可能使用撇号来打破字符串:

string queryString = "select id_user, nom, prenom, mail, login, mdp, last_visite, id_group, id_user_status from USERS where login = '" + _login.Replace("'","''") + "' and mdp = '" + _password.GetHashCode().ToString().Replace("'","''") + "'";

但是,使用参数化查询仍然更容易,然后数据库驱动程序会为您完成此操作。如果您尝试自己处理编码,但没有得到正确的结果,那么您就陷入了困境worse地方,因为您认为问题已得到解决,但它可能很容易受到 SQL 注入攻击。


旁注:String.GetHashCode方法不适合哈希密码之类的事情。该方法的实现将来可能会发生变化(就像过去一样),这将使数据库中的所有散列密码变得无用。

“不要序列化哈希码值或将它们存储在数据库中。” -- http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免Sql注入攻击 的相关文章

  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 自定义 IQueryable

    我正在尝试自定义应用程序的实体 使它们具有引用加载它们的 DataContext 的属性 我认为最好的方法是以某种方式创建一个实现 IQueryable 的类 并在其 GetEnumerator 方法中设置实体 datacontext 属性
  • 如何拦截 Boo 中的方法调用?

    红宝石有method missing Python有getattr Boo 是否提供了一些可以用来拦截方法调用的东西 是的 布有IQuackFu http docs codehaus org pages viewpage action pa
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • 以编程方式设置 maxRequestLength

    有一个配置值叫做maxRequestLength 在配置文件中 它看起来像这样
  • jQuery Datatable:分页和过滤器显示不正确

    我不知道如何解决这个问题 尝试了一整天但没有成功修复分页 我正在使用 jQuery 数据表 并且为了显示我的大量数据 我正在使用服务器端 作为测试 仅调用表中的 10 行数据 然后在传递到表之前 我重组了里面的数据dataSrc 使用这个解
  • ASP.net C#,采用不同参数类型的同名方法[重复]

    这个问题在这里已经有答案了 可能的重复 可以在 ASP Net MVC 中重载控制器方法吗 https stackoverflow com questions 436866 can you overload controller metho
  • 在 SQL 2005+ 中,CLR 存储过程是否优于 TSQL 存储过程?

    我目前的观点是否定的 更喜欢 Transact SQL 存储过程 因为它们是重量更轻且 可能 性能更高的选项 而 CLR 过程允许开发人员进行各种恶作剧 然而最近我需要调试一些写得非常糟糕的 TSQL 存储过程 像往常一样 我发现许多问题是
  • 如何计算最低系统要求?

    对于我用 Visual C 编写的应用程序 Testing 不 真的 这就是全部
  • 将 EditForm 绑定到数组时如何让 EditContext.Validate() 工作

    我创建了一个EditForm像这样包装表格 Index razor using System ComponentModel DataAnnotations
  • 什么时候值得使用 BindingSource?

    我想我非常了解 BindingSource 类的作用 即在数据源和 UI 控件之间提供一个间接层 它实现了 IBindingList 接口 因此还提供了对排序的支持 而且我已经经常使用它 没有太多问题 但我想知道我使用它的频率是否超过了应有
  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • HttpContext.GetGlobalResourceObject 始终返回 null

    我在 App GlobalResources 文件夹中创建了两个文件 SiteResources en US resx SiteResources sp SP resx 两者都包含 SiteTitleSeparator 的值 这是我想要做的
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创

随机推荐

  • href 链接中的 laravel 方法?

    我想创建一个带有两个链接的下拉菜单 删除 和 编辑 链接 对于删除功能 我创建了一个表单 Former horizontal open gt method DELETE gt action action Test TestControlle
  • 转换unix时间戳php

    我有一个数据库来存储我的时间 我使用 PHP 插入它 date Y m d H i s 然后我使用这个函数将其转换为 PHP 中的 unix 时间戳 function convert datetime str list date time
  • 线程 - wait()

    The wait 对象上的方法只能在同步上下文中调用 即当前线程必须拥有对象上的锁才能调用wait 方法 现在如果线程 T1 拥有对象上的锁 obj 并调用其 wait 方法obj wait 其他线程如何获得该对象的锁定 obj 这样他们也
  • 为什么Eclipse将maven运行时依赖变成编译依赖?

    我有一个 Maven 项目导入到 Eclipse Oxygen 中 Eclipse 报告没有编译问题 Alt F5 当我从命令行运行 Maven 时 我得到 ERROR home dean src TAP3UIs TAP3Desktop s
  • 我尝试在不同线程上使用 OpenGL 和 Windows API

    所以基本上我正在使用窗口 API创建一个空窗口 然后我使用OpenGL从不同的线程绘制到该窗口 我设法做到了这一点仅用一根线程 但是获取和分派系统消息以使窗口可用会减慢我能够获得的帧速率 因此我试图在主线程中绘制时让另一个线程并行执行此操作
  • 加号解码为空格

    我从 ios 和 android 发送请求到一些 PHP 服务器 并且 GET 请求中的一些参数被错误解码 request http myserver com path email john doe GET email john doe i
  • --no-ff merge 如何打破平分和指责?

    了解 Git 工作流程文章说 因此 您添加了一条新规则 当您合并功能分支时 请使用 no ff 强制进行新的提交 这样就完成了工作 然后你就可以移动了 在 然后有一天 您在生产中发现了一个严重的错误 并且您需要 追踪它的推出时间 你跑平分但
  • PHP:无法从 DOMDocument 中删除节点

    我无法从 DOMDocument 中删除节点 获取异常 My Code
  • matplotlib/seaborn 中时间直方图中的轴刻度

    我有一个 df 其中包含来自 WhatsApp 聊天的消息 发件人以及日期时间格式的相应时间 Time Sender Message 2020 12 21 22 23 00 Sender 1 2020 12 21 22 26 00 Send
  • 使用 Discord.py 在一条消息中发送多个嵌入内容

    我一直在尝试使用discord py 在一条消息中发送嵌入列表 我在discord py的文档中看到这是可能的 https discordpy readthedocs io en latest api html 发送 内容 无 等待 假 用
  • 为什么 C++ 中不存在成员引用?

    在 C 中 我可以在函数指针和函数引用之间进行选择 甚至为了完整性而选择函数值 void call function pointer void function function void call function reference v
  • 将文本文件中的数字读取到二维数组

    尽管这里有很多例子 但我似乎无法让它工作 我有一个文本文件 包含许多行 每行都有三个 int 值 用一个空格分隔 例如 1 0 0 0 0 0 1 0 1 0 0 2 1 0 2 我正在尝试将其读入二维数组 到目前为止我的代码 int ma
  • Laravel:如何在视图刀片中解析此 json 数据?

    目前这是我的观点 leads 这是输出 error false member id 1 firstName first lastName last phoneNumber 0987654321 email email protected o
  • 小程序上的 iframe 闪烁

    我正在使用 iFrame 在我的在线游戏中通过 Applet 显示内容 它在 Safari Chrome Firefox Opera 等浏览器中完美运行 但在 Windows 上的 Internet Explorer 中却始终无法正常运行
  • 流式传输实时数据时,Worksheet_Change 不会启动

    我读过很多关于这个主题的帖子 但是似乎没有什么适合我的场景 我想Call Sub单元格更改后 B2 其中包含来自外部源的实时数据馈送 last updated Private Sub Worksheet Change ByVal Targe
  • 如何将十进制数转换为固定位数的二进制数

    我想将数字从 0 转换为 15 如下所示 0000 0001 0010 0011 1111 问题是 当我们将 2 转换为二进制数时 它只给出二进制的 10 但我想将 2 转换为 4 位二进制数 0010 这段代码应该可以满足您的需求 For
  • 与以下使用数组更新运算符 $[] 的查询等效的 MongoDB C# 驱动程序是什么

    From https docs mongodb com manual reference operator update positional filtered up S 3标识符 3E 给定以下集合 id 1 grades grade 8
  • 用于连接两个媒体容器(视频和音频流)的 Gstreamer 管道

    我是 gstreamer 的初学者 正在努力使用 Gstreamer 1 0 的管道来无缝连接两个 MP4 媒体容器 这两个容器都包含视频和音频流 在我看来 使用 concat 元素是最方便的方法 我可以连接任一视频流 gst launch
  • Amazon Keyspaces 不支持的分区程序(适用于 Apache Cassandra)

    我有一个 Java Spring 应用程序并且正在使用Amazon Keyspaces 适用于 Apache Cassandra 我正在使用sigv4 插件 版本 4 0 2 cassandra java driver core 版本 4
  • 避免Sql注入攻击

    我有一个 ASP NET 应用程序 其中我有这段代码 using Data connexion string queryString select id user nom prenom mail login mdp last visite