2010-03-30 109 views
2

我有一个搜索页面,我想阻止用户在文本框中输入',或者用合适的字符替换它。任何人都可以帮助我在asp.net vb中实现这一点?停止用户输入'char

例如,如果为O'Reilly用户搜索的搜索与错误崩溃:

Line 1: Incorrect syntax near 'Reilly'. Unclosed quotation mark before the character string ' '. 

谢谢!

+1

你能解释为什么你不能使用参数化的语句,你正在使用的数据库? – 2010-03-30 07:29:50

+0

如果您使用的是asp.net,则可以使用参数化语句 – CResults 2010-03-30 07:31:01

+0

时间是一个因素。我有一个工作演示后有时间参数化。 – Phil 2010-03-30 07:35:18

回答

0

要真正回答这个问题,你可以把一个onkeydown事件JavaScript事件对你的文本框,检测被按下的键,并有可能取消输入:

<input class="mainSearchBox" type="text" id="searchTerm" onkeydown="DetectIllegalKeys();"> 

<script> 
function DetectIllegalKeys() { 
    if (event.keyCode == 222) { 
     event.returnValue = false; 
    } 
} 
</script> 

,而不是改变撇号的备选字符:

<input class="mainSearchBox" type="text" id="searchTerm" onkeyup="ChangeSingleQuote();"> 

<script> 
function ChangeSingleQuote() { 
    var searchTerm = document.getElementById('searchTerm'); 
    searchTerm.value = searchTerm.value.replace(/'/g, "e"); 

} 

我强烈建议你使用这种方法对于这个问题! 最好修复应用程序以允许搜索任何字符串的标题。

+0

我也猜测这种方法的工作,您的数据库将需要存储O'Reilly书作为OReilly书:-) – CResults 2010-03-30 08:41:10

2

嗯。使用parameterized queries

+0

我不能这是一个动态生成的SQL字符串,其中一些rownames是通过Web控件提供的。它是防火墙后面运行的内部应用程序,通过AD验证,因此用户可以信任。还有其他建议吗? – Phil 2010-03-30 07:25:09

+0

只是因为用户的信任并不意味着他们不会意外地创建一个查询,真的弄脏了事情...... – 2010-03-30 07:27:42

+0

@Phil - 即使你在代码中建立声明,你仍然可以把一个参数在当前正在复制值的位置的语句,并将相应的参数添加到参数集合中。 – 2010-03-30 07:28:51

1

您可以使用其中的两个“字符逃脱”,例如

sql += "Surname LIKE '%" & name.Replace("'", "''") & "%' AND " 

然后SQL会接受它。我想建议使用parameters

+1

这是主观的(因此没有-1),但我'真的,甚至在提示手动转义之前真的三思而后行,即使你指向使用参数化查询。 – 2010-03-30 07:26:16

+0

@Pasi。为什么是这样? – Phil 2010-03-30 07:29:12

+0

@Pasi:我同意不使用参数不是最好的解决方案,但如果Phil不需要它们,手动转义至少会提供工作代码。无论如何,我认为其他帖子中有足够的警告。 :) – 2010-03-30 07:44:03

1

对文本框使用javascript onKeyDown事件 - 如果键入的字符是撇号,则可以简单地将其删除,以便不输入它。
在服务器端,您应该简单地将“'”替换为“”,只是为了确保。
请注意,这是一个非常不安全和不稳定的解决方案。

0

您需要了解错误发生的原因,而不是仅根据症状解决问题。阅读微软自己的关于SQL注入的文档,了解如何保护自己免受这类安全漏洞的侵害。

http://msdn.microsoft.com/en-us/library/ms998271.aspx

(正如一些人所指出的,参数化的语句是解决方案。)