`

ado sql操作及防止注入

 
阅读更多
	/*sql.Format(_T("delete from SELLINFO where Merchandise ='%s'"), m_name);
	m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);
	m_list.DeleteItem(pos);*/
	//ÑéÖ¤sql×¢ÈëÎÊÌâ
//_ConnectionPtr
      
    //sql = _T( "select * from SellInfo where  Merchandise = '1' OR '1'='1'  ");
//	CString m_name = "1' OR '1'='1";
//	sql.Format("delete from SellInfo where  Merchandise = '%s'", m_name);
  //  m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);
	
	//pCommand->CommandText="delete from SELLINFO where Merchandise = '%s'"; 


	_CommandPtr pCommand(__uuidof(Command)); 
	m_pRecordset.CreateInstance(__uuidof(Recordset)); 

    pCommand->CommandText="delete from SELLINFO where Merchandise = ? "; 
  //pCommand->CommandText="delete from SELLINFO where  ? "; 

	pCommand->Parameters->Refresh();
		//_ParameterPtr  param=pCommand->CreateParameter(_bstr_t("121"), adBSTR,adParamInput,strlen("121"), "121");
	_ParameterPtr  param=pCommand->CreateParameter(_bstr_t(" '1' OR  '1'='1' "), adBSTR,adParamInput,strlen(" '1' OR '1'='1' ")," '1' OR '1'='1' ");
 	pCommand->Parameters->Append(param);
   

   	//pCommand->CommandText=" delete from SELLINFO  where Merchandise = '1' OR '1'='1' "; ->²»ÄÜÓÃsqlÆ´½Ó
	pCommand->ActiveConnection=m_pConnection; 
	pCommand->CommandType=adCmdText; 
//	 

MessageBox("exe before");
m_pRecordset=pCommand->Execute(NULL,NULL,adCmdText);   //??sql??
MessageBox("over");

 

 

不要直接用用户输入的数据 如果数据库包含恶意字符 这样会导致 hack 填空 导致 delete from SELLINFO where Merchandise = '1' OR '1'='1'  执行 数据全部删除 

 

 

 

CString m_name = " '1'  OR '1'='1' ";

 

sql.Format("delete from SellInfo where  Merchandise =  %s ", m_name);

 

 m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);  

 

 

 

 

 

try{ 

 

CString m_name = "  1'  OR '1'='1  "; 

sql.Format("delete from SellInfo where  Merchandise =  '%s' ", m_name);

 m_pConnection->Execute((_bstr_t)sql, NULL, adCmdText);  

}

catch(_com_error   e) 

AfxMessageBox(e.Description()); 

return;

 

会导致数据全部删除 

 

 ---------------

 

 

VC++中使用MFC通过ADO连接数据库方法小结(不包括异常的捕捉)

这里主要讲MFC与ACCESS数据库(SQL2000方法差不多,主要是连接字符串不同)

1、在StdAfx.h头文件中加入此句子

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")//不要命名空间,重命//名EOF为rsEOF

这句话意味使用msado15.dll动态连接库文件,里面就有ADO

2、实现从数据库中提取显示数据 CoInitialize(NULL); //初始化COM组件

_ConnectionPtr pConn(__uuidof(Connection)); //实例化一个connection对象pConn

_RecordsetPtr pRst(__uuidof(Recordset)); //实例化一个Recordset对象pRst

_CommandPtr pCmd(__uuidof(Command)); //实例化一个Command对象pCmd

pConn->ConnectionString="Provider=MIcrosoft.Jet.OLEDB.4.0;Data so

 

 

 

 

 

 

urce=student.mdb";

//通过pConn对象连接字符串,连接到ACCESS数据库,这里ACCESS数据库在C根目录下

pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn)); pCmd->CommandText="SELECT * FROM stu"; //通过pCmd对象访问数据库

pRst=pCmd->Execute(NULL,NULL,adCmdText); while(!pRst->rsEOF) {

((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("学号"));

//把数据库中学号这列的内容放入IDC_LIST1的LIST控件中 pRst->MoveNext(); //下移一个 }

pRst->Close(); //关闭对象 pConn->Close();

pCmd.Release(); //释放对象 pRst.Release(); pConn.Release();

CoUninitialize(); //卸载COM组件

 

 

 

 

 

 

 

3、实现插入记录 CoInitialize(NULL);

_ConnectionPtr pConn(__uuidof(Connection)); _RecordsetPtr pRst(__uuidof(Recordset)); _CommandPtr pCmd(__uuidof(Command));

_variant_t RecordsAffected; //申请一个_variant_t类型的的变量

pConn->ConnectionString="Provider=MIcrosoft.Jet.OLEDB.4.0;Data source=student.mdb";

pConn->Open("","","",adConnectUnspecified);

pRst=pConn->Execute("INSERT INTO stu (学号,姓名,电

话) VALUES ('2222','dddd','123456')",&RecordsAffected,adCmdText);

//pRst->Close(); //若有此句可以实现插入,但会产生runtime错误提示 pConn->Close(); pCmd.Release(); pRst.Release(); pConn.Release(); CoUninitialize();

 

 

 

 

 

 

 

4、实现删除记录

CoInitialize(NULL);

_ConnectionPtr pConn(__uuidof(Connection)); _RecordsetPtr pRst(__uuidof(Recordset)); _CommandPtr pCmd(__uuidof(Command));

_variant_t RecordsAffected; //申请一个_variant_t类型的的变量

pConn->ConnectionString="Provider=MIcrosoft.Jet.OLEDB.4.0;Data source=student.mdb";

pConn->Open("","","",adConnectUnspecified);

pRst=pConn->Execute("DELETE FROM stu WHERE 学号='2'",&RecordsAffected,adCmdText);

pConn->Close(); pCmd.Release(); pRst.Release(); pConn.Release(); CoUninitialize();

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ADO操作sqlserver

    7. **参数化查询**:为了防止SQL注入攻击,通常会使用参数化查询。在ADO中,你可以创建`ADODB.Parameter`对象来定义参数,然后在SQL语句中使用它们。 8. **关闭资源**:操作完成后,记得关闭Recordset和Connection...

    ado.net操作oracle简单参数化sql操作

    在本文中,我们将深入探讨如何使用ADO.NET进行Oracle数据库的简单参数化SQL操作,这对于防止SQL注入攻击、提高代码可读性和复用性至关重要。 首先,要进行Oracle数据库操作,我们需要引入Oracle的数据提供者——...

    Asp.Net通用Sql防注入源码

    "Asp.Net通用Sql防注入源码"是针对这个问题提供的一种解决方案,旨在帮助Asp.Net程序员更好地保护他们的应用程序免受SQL注入攻击。 SQL注入攻击通常发生在应用程序没有正确验证或清理用户输入时。例如,当用户在...

    asp.net简单防范sql注入漏洞

    asp.net简单防范sql注入漏洞 防止 sql注入攻击 1 限制 文本框的最大长度 2 删除用户的单引号 3 处理sql注入的另外一个方法是 使用ado.net command对象的参数集合。 而不是评接多个字符串

    C++使用ADO连接SQL Server数据库源代码

    - 使用参数化的SQL语句防止SQL注入攻击,提高安全性。 5. 高级话题: - ADO.NET和ODBC:除了ADO,C++还可以通过ADO.NET(.NET框架的一部分)或Open Database Connectivity(ODBC)驱动程序与SQL Server通信。每种...

    创建ADO对象实现数据库防注入源码

    总结一下,创建ADO对象实现数据库防注入主要涉及到使用`ADODB.Connection`和`ADODB.Command`对象,通过参数化查询避免SQL注入风险。对于任何处理用户输入的情况,都应该优先考虑安全性,确保应用程序的健壮性。学习...

    C#ADO.NET操作SQL数据库

    参数化查询有助于防止SQL注入攻击。 3. **读取数据**: SqlDataReader用于从数据库流式读取结果。例如: ```csharp SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console....

    SQL防注入+SQL注入原理

    了解SQL注入的原理是防止它的关键。以下将深入讲解SQL注入的基本概念及其防范方法。 首先,让我们理解SQL注入的原理。当一个Web应用在构建动态SQL查询时,它可能会直接使用用户提供的输入。如果这个输入没有经过...

    SQL 防注入代码全集

    本资源"SQL 防注入代码全集"提供了多种编程语言(如ASP和C#)的防御策略,帮助开发者保护其应用程序免受此类攻击。 一、SQL注入的基本原理 SQL注入通常发生在应用程序没有充分验证用户输入的情况下。攻击者可以通过...

    SQL参数化-防SQL注入

    SQL参数化防SQL注入 SQL参数化是一种防止SQL注入的有效方法。SQL注入是一种常见的Web应用安全漏洞,攻击者可以通过.inject恶意代码来获取或修改数据库中的数据。参数化是指在SQL语句中使用参数,而不是直接使用用户...

    简单的asp.net登陆有一定的sql防注入功能

    标题提到的"简单的asp.net登陆有一定的sql防注入功能",意味着这个示例将展示一种基础的方法来防止SQL注入攻击。在ASP.NET中,通常我们会使用参数化查询或存储过程来避免这种情况,但在这个例子中,它可能通过一个...

    sql注入网站源码

    2. **防止SQL注入**:最有效的防御方法是使用参数化查询或预编译的SQL语句。在ASP中,可以使用ADO(ActiveX Data Objects)的Command对象和参数,这样用户输入的数据不会影响SQL结构。此外,应避免使用动态SQL,尽...

    ADO访问SQL数据库

    ADO(ActiveX Data Objects)是Microsoft开发的一种数据访问技术,用于与各种数据库系统交互,...记住,始终确保在操作数据库时遵循最佳实践,例如使用参数化查询以防止SQL注入,以及正确管理事务以确保数据一致性。

    ASP.NET防SQL注入脚本程序

    这个"ASP.NET防SQL注入脚本程序"显然是为了帮助开发者防止这种攻击而设计的。 SQL注入是黑客利用输入字段向应用程序的SQL查询中插入恶意代码,从而控制或操纵数据库的一种手段。例如,如果一个登录页面没有正确验证...

    sql.rar_SQL防注入_asp 防注入_sql注入_防破

    总的来说,防止SQL注入需要综合运用多种技术手段,包括但不限于使用参数化查询、限制数据库权限、进行服务器端验证、数据加密以及保持系统更新。理解和掌握这些方法,是每个ASP开发者的必备技能,可以有效提高网站的...

    ADO连接SQL数据库

    除了基本的CRUD操作,ADO.NET还支持参数化查询,防止SQL注入攻击,以及使用存储过程。`SqlParameter`类用于添加参数,与SQL语句中的占位符对应。 总的来说,ADO.NET提供了一个强大且灵活的接口,允许开发者高效地与...

    ASP.NET防SQL注入DEMO

    在本文中,我们将深入探讨如何在ASP.NET中防止SQL注入攻击,这是一个重要的安全问题,对任何处理数据库交互的应用来说都是至关重要的。 SQL注入是黑客利用不安全的代码向数据库发送恶意SQL语句,从而获取、修改、...

    c++ ado操作sql server封装类

    - 参数化查询:尽量使用参数化查询,以防止SQL注入攻击。 - 事务处理:对于多步骤的操作,可以使用ADO的事务支持以确保数据的一致性。 通过这样的封装,C++开发者可以更高效、安全地进行SQL Server数据库操作,...

    SQL数据连接工具_(ADO)

    5. **参数化查询**:`Parameter`对象允许你在SQL语句中使用参数,这可以防止SQL注入攻击并提高代码的可读性和可维护性。例如,创建一个带参数的SELECT语句: ```vbnet Dim cmd As New ADODB.Command cmd....

Global site tag (gtag.js) - Google Analytics