Asp.net 停止用户输入';烧焦

Asp.net 停止用户输入';烧焦,asp.net,sql,string,validation,Asp.net,Sql,String,Validation,我有一个搜索页面,我想阻止用户在文本框中输入“a”,或者用合适的字符替换它。有人能帮我在asp.net vb中实现这一点吗 例如,如果用户搜索O'Reilly,则搜索会因错误而崩溃: Line 1: Incorrect syntax near 'Reilly'. Unclosed quotation mark before the character string ' '. 谢谢 正确使用,这将为您处理。哦。使用。您可以将“字符与其中两个字符”转义,例如 SQL将接受它 但是,我建议对文本框使

我有一个搜索页面,我想阻止用户在文本框中输入“a”,或者用合适的字符替换它。有人能帮我在asp.net vb中实现这一点吗

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

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

谢谢

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

哦。使用。

您可以将“字符与其中两个字符”转义,例如

SQL将接受它


但是,我建议对文本框使用。

使用javascript onKeyDown事件-如果键入的字符是撇号,您可以简单地将其删除,以便不输入。
在服务器端,您只需将“'”替换为“”,以确保安全。

请注意,这是一个非常不安全且不稳定的解决方案。

要真正回答这个问题,您可以在文本框上设置OnKeyDown javascript事件,检测按下的键,并可能取消输入:

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

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

函数detectilegalkeys(){
如果(event.keyCode==222){
event.returnValue=false;
}
}
要将撇号改为替换字符,请执行以下操作:

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

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

}

函数ChangeSingleQuote(){
var searchTerm=document.getElementById('searchTerm');
searchTerm.value=searchTerm.value.replace(/'/g,“e”);
}
我强烈建议您不要使用此方法解决此问题!
修复应用程序以允许搜索任何字符串的标题要好得多。

您需要了解错误发生的原因,而不仅仅是对症下药地解决它。阅读微软自己关于SQL注入的文档,了解如何保护自己免受此类安全缺陷的影响


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

我不能理解,它是一个动态生成的sql字符串,其中一些行名是通过web控件提供的。它是一个运行在防火墙后面的内部应用程序,针对AD进行身份验证,因此用户是可信的。还有其他建议吗?仅仅因为用户是可信的,并不意味着他们不会意外地创建一个真正把事情搞砸的查询…@Phil-即使你在代码中构建语句,你仍然可以在语句中当前正在复制值的位置放一个参数,并将适当的参数添加到参数集合中。@Phil-另外,最好希望您不在18%范围内,这是主观的(因此没有-1),但在建议手动转义之前,即使您确实指向使用参数化查询,我也会三思而后行。@Pasi:我同意不使用参数不是最好的解决方案,但是如果Phil不想要它们,手动转义至少会给出工作代码。我认为,无论如何,在其他帖子中也有足够的警告谢谢,我知道这些警告并将采取行动。您能解释一下为什么不能使用参数化语句,以及您使用的是什么数据库吗?如果您使用的是asp.net,您可以使用参数化语句。时间是一个因素。在我有了一个工作演示之后,我被允许有时间进行参数化。那么不要浪费时间在省略号处理上,因为只有当你切换到参数时,你才会撤销这项工作。相反,只需在演示中解释一下,您不能搜索任何包含撇号yetDim组合符String=If(andor=“0”,“AND”,“OR”)的内容。现在,对于初学者来说,您可以将代码一分为二。我还猜测,为了使这种方法起作用,您的数据库将需要将O'Reilly books存储为OReilly books:-)
<input class="mainSearchBox" type="text" id="searchTerm" onkeyup="ChangeSingleQuote();">

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

}