请问用了Parameters带参数后,还用对字符进行过滤吗?
各位大虾,你们好,请看我的代码:
#region HtmlEncode
/// <summary>
/// 说明:过滤危险字符
/// 返回值:处理后的这符串。
/// 参数:str原字符串。
/// 创建日期:2008-2-23
/// 创建人:
/// </summary>
public static string HtmlEncode(string str)
{
if (str.Trim().ToString() == "")
{ str = ""; }
else
{
str = str.Replace("&", "&");
str = str.Replace("<", "<");
str = str.Replace(">", ">");
str = str.Replace("'", "’");
str = str.Replace("*", "");
str = str.Replace("\n", "<br/>");
str = str.Replace("\r\n", "<br/>");
//str = str.Replace("?","");
str = str.Replace("select", "");
str = str.Replace("insert", "");
str = str.Replace("update", "");
str = str.Replace("delete", "");
str = str.Replace("create", "");
str = str.Replace("drop", "");
str = str.Replace("delcare", "");
}
return str.Trim();
}
#endregion
UserName = HtmlEncode(Uname.Text.Trim().ToString());
UserPass = GetMd5(HtmlEncode(Upass.Text.Trim().ToString()));
string StrSql = "select top 1 id from admin where username=@username and userpass=@userpass and is_open=true and is_admin=true";
MyDBlink.GetSqlCommand(StrSql);
MyDBlink.comm.Parameters.AddWithValue("@username", SqlDbType.VarChar);
MyDBlink.comm.Parameters["@username"].Value = UserName;
MyDBlink.comm.Parameters.AddWithValue("@userpass", SqlDbType.VarChar);
MyDBlink.comm.Parameters["@userpass"].Value = UserPass;
我进行了一次过滤字符串后,又用了一次Parameters,我想请问一下,我这么做多余吗?用了Parameters后还需要对字符串进行过滤吗?谢谢
[解决办法]
-_- 这么复杂, 取值的时候处理,不好么?
你难道不允许文章内容 标题之类的含有 select insert之类的?
[解决办法]
凡是用户的输入你就先过滤一下 没有坏处
[解决办法]
用了Parameters后不需要对字符串进行过滤
[解决办法]
如果你的sql语句不是动态拼接的,不用再进行过滤
[解决办法]
不用
[解决办法]
基本上不用了
[解决办法]
SQL注入分为轻级注册和深度注入。要防深度注入还是有必要再次过滤。
深度注入的文章,之前有看过。忘记哪看过了。
不过通常讲很多人还是只过滤到轻级注入
[解决办法]
------解决方案--------------------
NO
[解决办法]
参数化可以达到基本要求了,绝对的安全是不存在的.
如果强行过滤就很大程度上限制了用户的输入.
[解决办法]
Agree with 11 floor's
[解决办法]
可以不用了
[解决办法]
是可以不用
但是防止不了注入
还是过滤的好
[解决办法]
存储过程中不拼SQL 就没必要过滤了
[解决办法]
没必要这么过滤2次,其实用了Parameters就足够了
[解决办法]
[解决办法]