LPWSTR *szArglist = NULL;
int nArgs = 0;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
CString Work_num; CString pwd; Work_num.Format("%s",szArglist[1]); pwd.Format("%s",szArglist[2]); if( NULL != szArglist)
{
try{
CRecordset rs(&m_db);
CString sql ;
sql.Format("select * from users where work_num = '%s' and pwd = '%s'",Work_num,pwd); rs.Open(CRecordset::dynaset,sql);
if(rs.IsEOF()==0){ GetDlgItem(IDC_LOGINNAME)->SetWindowText(my_name) ;
}
else
{ MessageBox("管理员名或密码错误","提示"); OnCancel();
}
}catch(CDBException *pe)
{
pe->ReportError();
}
} LocalFree(szArglist);
//我传的命令行参数是:E:\PAMS_COMEXE\PAMS_COM.exe 0201 32222 长度是3,这个可以看出来,但我取的值szArglist[0] //szArglist[1] szArglist[2] 分别是:E、0、3 请问我如何才能取到完整的字符串?
你用的是宽字符的吧!而你程序中用的可能是ascii码
把你的这些换成WCHAR [];使用swprintf函数来格式化数据
--》
WCHAR Work_num[MAX_APTH] = {0};
WCHAR pwd[20] = {0};swprintf(pwd, L"%s", szArglist[1]);
swprintf(Work_num, L"%s",szArglist[2]);
char *psDest;
psDest= new char[dwNum];
if(!psDest)
{
delete []psDest;
}
WideCharToMultiByte (CP_OEMCP,NULL,szArglist[1],-1,psDest,dwNum,NULL,FALSE);Work_num.Format("%s",psDest );delete []psDest;其他同理
ee' or '1'='1
ee' or '1'='1一个典型的注入漏洞!改改查询方法吧!