停止用户输入'char

时间:2010-03-30 07:19:51

标签: asp.net sql string validation

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

例如,如果用户搜索O'Reilly,则搜索会因错误而崩溃:

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

谢谢!

6 个答案:

答案 0 :(得分:7)

正确使用parameterized statements,这将为您处理。

答案 1 :(得分:2)

糟糕,使用parameterized queries

答案 2 :(得分:1)

你可以逃脱'两个人的'角色'',例如

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

然后SQL会接受它。

但是,我建议使用parameters

答案 3 :(得分:1)

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

答案 4 :(得分: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"); 

}

我强烈建议您使用此方法解决此问题! 最好修复应用程序以允许搜索任何字符串的标题。

答案 5 :(得分:0)

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

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

(正如其他几位指出的那样,参数化语句就是解决方案。)