检查Sql 查询中是否有安全漏洞

检查Sql 查询中是否有安全漏洞,第1张

假定字符串参数中包含用户输入。基于用户输入生成的 SQL 命令字符串易于受到 SQL 注入式攻击。在 SQL 注入式攻击中,恶意用户提供将更改查询设计的输入,以试图破坏基础数据库或获取对基础数据库的未经授权的访问权限。典型的方法包括注入单引号或省略号(它们都是 SQL 文本字符串分隔符)、两个短划线(表示 SQL 注释)和一个分号(指示后面有新命令)。如果用户输入必须是查询的一部分,请使用下面按有效性顺序列出的方法之一来降低攻击风险。

使用存储过程。

使用参数化命令字符串。

在生成命令字符串之前针对类型和内容验证用户输入。

示例:

#using <Systemdll>
#using <SystemDatadll>
#using <SystemEnterpriseServicesdll>
#using <SystemTransactionsdll>
#using <SystemXmldll>using namespace System;using namespace System::Data;using namespace System::Data::SqlClient;namespace SecurityLibrary
{   public ref class SqlQueries
   {   public:
      Object^ UnsafeQuery(
         String^ connection, String^ name, String^ password)
      {
         SqlConnection^ someConnection = gcnew SqlConnection(connection);
         SqlCommand^ someCommand = gcnew SqlCommand();
         someCommand->Connection = someConnection;
         someCommand->CommandText = String::Concat(            "SELECT AccountNumber FROM Users WHERE Username='", 
            name, "' AND Password='", password, "'");
         someConnection->Open();
         Object^ accountNumber = someCommand->ExecuteScalar();
         someConnection->Close();         return accountNumber;
      }
      Object^ SaferQuery(
         String^ connection, String^ name, String^ password)
      {
         SqlConnection^ someConnection = gcnew SqlConnection(connection);
         SqlCommand^ someCommand = gcnew SqlCommand();
         someCommand->Connection = someConnection;
         someCommand->Parameters->Add(            "@username", SqlDbType::NChar)->Value = name;
         someCommand->Parameters->Add(            "@password", SqlDbType::NChar)->Value = password;
         someCommand->CommandText = "SELECT AccountNumber FROM Users "  
            "WHERE Username=@username AND Password=@password";
         someConnection->Open();
         Object^ accountNumber = someCommand->ExecuteScalar();
         someConnection->Close();         return accountNumber;
      }
   };
}using namespace SecurityLibrary;void main()
{
   SqlQueries^ queries = gcnew SqlQueries();
   queries->UnsafeQuery(Environment::GetCommandLineArgs()[1], 
      "' OR 1=1 --", "anything");   // Resultant query (which is always true): 
   // SELECT AccountNumber FROM Users WHERE Username='' OR 1=1
   queries->SaferQuery(Environment::GetCommandLineArgs()[1], 
      "' OR 1 = 1 --", "anything");   // Resultant query (notice the additional single quote character):
   // SELECT AccountNumber FROM Users WHERE Username=''' OR 1=1 --'
   //                                   AND Password='anything'}

以上就是关于检查Sql 查询中是否有安全漏洞全部的内容,包括:检查Sql 查询中是否有安全漏洞、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9813018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存