这里还有一个重要的值VT_NULL,它表示数据库中相应字段的数据为空。一些控件上无法处理VT_NULL的情况,例如:ListCtrl。如果使用ListCtrl对数据进行显示,可以考虑用下面的方法进行判断:if(rs->GetCollect("user").vt == VT_NULL) // record is nullelse // record is non-null
三 安全问题 现在流行SQL INJECTION,因此对于字符串的过滤是一个很重要的问题。如果是用VB来做这样的程序,可以很容易的实现,VB中的字符串操作是很容易的,还可以使用VBSCRIPT中的正则表达式(VC中也可以使用VBSCRIPT中的正则表达式,然而方法我忘记了,记得Codeproject中有相关的文章。或者使用现成的库如BOOST,greta)。如果不会正则表达式,也可以用下面的方法:
//// 检查指定字符串中是否包含非法字符//BOOL StrCheck(LPCTSTR lpszString){ CString strKey = "\''''\\\"%#|=+-)(,.?/">*&^$@!`~:;<>,.?/"; int len = strlen(lpszString);
for(int i = 0; i < len; i++) { for(int j = 0; j < strKey.GetLength(); j++) { if(lpszString[i] == strKey.GetAt(j)) return FALSE; } }
return TRUE;}
如果程序的输入需要用到"''''"或"""这两个符号的话,还应该进行相应的转换。//// 对于ACCESS和MSSQL//strUser.Replace("\''''", "\''''\''''");strUser.Replace("\"", "\"\"");
//// 对于MySQL//strUser.Replace("\''''", "\\\''''");strUser.Replace("\"", "\\\"");对于使用搜索的话,还需要过滤掉"_"和"#",经过上面几步才能保证SQL INJECTION发生的几率减少。对于多用户的系统,应该使用MD5的方法将登录的密码进行加密。尽量不要使用ACCESS作为开发使用的数据库,其安全性实在是太差,即便是加了密码,也可以轻松在本地破解出来。推荐使用MySQL或者是MSSQL。
上一页 [1] [2]
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18