我有一个搜索页面,我想阻止用户输入'到文本框,或用合适的字符替换它。任何人都可以帮助我在asp.net vb中实现这一目标吗?
例如,如果用户搜索O'Reilly,则搜索会因错误而崩溃:
Line 1: Incorrect syntax near 'Reilly'. Unclosed quotation mark before the character string ' '.
谢谢!
答案 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
(正如其他几位指出的那样,参数化语句就是解决方案。)