避免SQL注入和特殊字符的一种方法
递归小谈自备C#辅助函数
十08
避免SQL注入和特殊字符的一种方法
C#Add comments
避免SQL注入和特殊字符的办法有很多,不同数据库也有不同数据库的解决方案,ADO.NET中使用DbCommand.Parameters解决这个问题,为了了解他的原理,我查了一下.NET中SQLCommand的源代码和MySQL.NET中MySQLCommand的源代码。
.NET源代码超级难跟踪,貌似是用了SQL Server独有的特性,把参数的名称、类型、把值的二进制都传给了SQL Server API,具体没有跟到。
MySQL实现就很简单了,他会把字符串类型的参数value使用一个过滤数组来过滤,在过滤字符前面加上“\”,我认为这是一种通用的做法,虽然效率上不如SQLCommand好,但是和容易移植更容易看懂!
使用PHP+MySQL做网站的同学也可以利用着类似的思想生成安全的SQL连接串,我看了PHPWind数据库处理函数,貌似并没有对所有的过滤字符进行处理,这就存在着一些安全隐患。
源代码
private static string stringOfBackslashChars = "\u005c\u00a5\u0160\u20a9\u2216\ufe68\uff3c";
private static string stringOfQuoteChars =
"\u0027\u00b4\u02b9\u02ba\u02bb\u02bc\u02c8\u02ca\u02cb\u02d9\u0300\u0301\u2018\u2019\u201a\u2032\u2035\u275b\u275c\uff07";
/// <summary>
/// Escapes the string.
/// </summary>
/// <param name="value" />The string to escape</param>
/// <returns>The string with all quotes escaped.</returns>
public static string EscapeString(string value)
{
StringBuilder sb = new StringBuilder();
foreach (char c in value)
{
if (stringOfQuoteChars.IndexOf(c) >= 0 ||
stringOfBackslashChars.IndexOf(c) >= 0)
sb.Append("\\");
sb.Append(c);
}
return sb.ToString();
}
如何在VS2008中开启.NET源代码调试
工具->选项->
调试->启用源服务器支持
符号->添加PDB位置http://referencesource.microsoft.com/symbols
本地缓存目录
相关文档:
1. SET DEADLOCK_PRIORITY
说明:控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。
语法:SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }
参数:LOW   ......
1.建表
create table temp(rq varchar(10),shengfu nchar(1))
2.插入数据
insert into temp values('2005-05-09','胜')
insert into temp values('2005-05-09','胜')
insert into temp values('2005-05-09','负')
insert into temp values('2005-05-09','负')
insert into temp values('2005-05-10','胜')
insert i ......
1、PL/SQL
Developer记住登陆密码
在使用PL/SQL
Developer时,为了工作方便希望PL/SQL
Developer记住登录Oracle的用户名和密码;
设置方法:PL/SQL
Developer 7.1.2
->tools->Preferences->Oracle->Logon History , “Store
history”是默认勾选的,勾上&ldqu ......
一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
3、LOWER()和 ......