100分咨询个问题,这样的方法有效吗?????
string ID = Server.UrlDecode(Web.ReadCookie(this, "Admin", "ID")).Trim().Replace("'", "a").Replace(" ", "b").Replace("=", "c");获取参数ID时,把“'”、“空格”、“=”这三个字符替换才其他的,能不能防止SQL的注入???? --------------------编程问答-------------------- 少少了 --------------------编程问答-------------------- 使用存储过程 可以防止注入
另外可以如此
--------------------编程问答-------------------- 这样是根据什么原理来防止sql注入的?
public static string StrFilter(string str)
{
/*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("'", "''");
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", "");
if (str.Trim().ToString() == "") { str = "无"; }
return str.Trim();
}
何不直接Relace("'","''")? --------------------编程问答-------------------- 能防一点点吧,但是估计不全 --------------------编程问答-------------------- 不能有效的防止.... 照样能注入. --------------------编程问答-------------------- 以前用Relace做了个玩玩,可以防止自己想到的字符。 --------------------编程问答--------------------
我是新手,请问题如果把“空格”都替换掉了,按道理是不能形成SQL语句了吗?为什么还能注入呢? --------------------编程问答--------------------
因为还有很多的关键字是可以注入的
--------------------编程问答-------------------- 防止不了!建议写个存储过程!!! --------------------编程问答-------------------- 能,但不是全部有效。建议写存储过程。。。 --------------------编程问答-------------------- 能,但是不全。 --------------------编程问答-------------------- 不能完全 --------------------编程问答-------------------- 参数化可以防止SQL注入 --------------------编程问答-------------------- 防止sql注入性攻击
/// </summary>
/// <param name=strInput">要过滤SQL字符的字符串。</param>
/// <param name="ReplaceSQLAndOr">是否过滤掉SQL字符串中的And和Or的关键字.其中true为过滤,false不过滤!</param>
/// <returns>已过滤掉SQL字符的字符串。</returns>
public string ReplaceSQLChar(string strInput,bool ReplaceSQLAndOr)
{
if (strInput == String.Empty)
{
return String.Empty;
}
else
{
if(ReplaceSQLAndOr)
{
strInput = strInput.Replace("and","");
strInput = strInput.Replace("AND","");
strInput = strInput.Replace("And","");
strInput = strInput.Replace("or","");
strInput = strInput.Replace("OR","");
strInput = strInput.Replace("Or","");
}
strInput = strInput.Replace("‘", "‘");
strInput = strInput.Replace(";", ";");
strInput = strInput.Replace(",", ",");
strInput = strInput.Replace("?", "?");
strInput = strInput.Replace("<", "<");
strInput = strInput.Replace(">", ">");
strInput = strInput.Replace("(", "(");
strInput = strInput.Replace(")", ")");
strInput = strInput.Replace("@", "@");
strInput = strInput.Replace("=", "=");
strInput = strInput.Replace("+", "+");
strInput = strInput.Replace("*", "*");
strInput = strInput.Replace("&", "&");
strInput = strInput.Replace("#", "#");
strInput = strInput.Replace("%", "%");
strInput = strInput.Replace("$", "¥");
//返回已过滤掉SQL字符的字符串
return strInput;
}
}
http://wenku.baidu.com/view/97b0a200b52acfc789ebc972.html --------------------编程问答-------------------- 改用存储过程吧 --------------------编程问答-------------------- 光去掉这些是不行的
建议看看SQL注入原理
百度上有很多这些文章
http://baike.baidu.com/view/3896.htm?fr=ala0_1_1 --------------------编程问答--------------------
开发不可能没漏洞
没有没漏洞的软件和网站
只是说尽量把漏洞减到最少 --------------------编程问答-------------------- 有些 道理 但还是有问题的 这也没办法 --------------------编程问答-------------------- 非常小用处。。。而且影响其他用户操作。。 --------------------编程问答-------------------- 能起点作用。。。。 --------------------编程问答-------------------- Relace("'","''")这样替换后可以过滤掉大部分的注入。
不过类似这条语句 sql="select * from users where name='"+name+"'";替换单引号后怎么注入? 这个问题网上也看过讨论,说是可以注入,但貌似都没给出具体的注入参数name的值。
自己试过也没找到如何注入这条语句,有人有答案否? --------------------编程问答-------------------- 1。参数化查询
2。不显示详细错误信息
这样应该可防sql注入 --------------------编程问答-------------------- 储存过程 --------------------编程问答--------------------
这是什么东东 --------------------编程问答-------------------- 最好使用存储过程,相对于安全点 --------------------编程问答--------------------
友情帮顶下!顺便学习学习!
--------------------编程问答-------------------- 试试 Linq 呵呵 --------------------编程问答-------------------- 在前台输入时做限制,用脚本写个方法,不让输入特殊符号 --------------------编程问答-------------------- 建议用存储过程 --------------------编程问答-------------------- 你替换了,别人有些内容本来就应该有空格的怎么办?一般都不建议处理,因为不应该修改用户的输入。所以一般为了防止注入可以采用添加PARAMETER参数的方式。(PS:这个其实也不是100%的防止注入,还要看你的SQL语句怎么写,存储过程也一样) --------------------编程问答-------------------- 没有效 SQL 注入不是只是说在 你的网站后面加些破效SQL语句的字符.
有可能还有些一潜在的注入,包括木马等,这些东西让你防不胜防.
你还不如直接用存储过程.用它不仅可以有效的保护程序不受SQL注入试攻击,而且还可以很好的提升
程序性能,不仅仅是大量的SQL在网络上传输会慢,也会受损,会不安全.就算是把T-SQL传到了
SQL Server,SQL Server执行一个过程也要比执行一串T-SQL快啊 --------------------编程问答-------------------- 不能有效防止,除楼上朋友们所说的方法之外还建议楼主把非组件上传也同时屏蔽 --------------------编程问答-------------------- 如果你觉得字符串有问题的话,你可以在网上下载一个操作字符串的类!StringUtil.cs StringHelper.cs --------------------编程问答-------------------- 改用存储过程吧
SqlParameter []param ={
new SqlParameter("@studentName",studentName),
new SqlParameter("@studentSex",studentSex),
new SqlParameter("@studentBirth",studentBirth)
补充:.NET技术 , ASP.NET