3

我有一个文本框,我正在使用 blur 事件使用正则表达式验证文本。如果失败,我希望文本框保持焦点。我知道在常规 javascript 中,您可以return functionName();在实际 html 控件中的 onblur 事件中说。$(document).ready()在函数中绑定模糊事件时,有没有办法做类似的事情。或者干脆把焦点放在“这个”上。感谢您的帮助。

$(document).ready(function() {");
    $('input:text.sqlValidation').blur(function() {");
        var sqlInjectionRegX2 = /...Regex.../;
        var value = this.value;
        if (sqlInjectionRegX2.test(value)) {
            alert('The text you have entered may contain malicious code and can not be submitted.');
            this.value = '';
            return false;
        }
        else return true;
    });
});
4

5 回答 5

6

在 Javascript 中使用正则表达式来防止 SQL 注入是所有(或至少是大多数)邪恶之母。 不要这样做!!! 相反,请在服务器端代码中使用参数。如果您不知道如何,请咨询我们。如果您尝试以您的方式阻止 SQL 注入,它将无法正常工作,并且您可能会丢失数据,或者更糟。你的敌人需要做的就是禁用 Javascript(或制作他自己的 HTTP 请求),你的过滤器将毫无用处。此外,我认为不可能用单个正则表达式完全阻止 SQL 注入。


要回答这个问题,请尝试在处理程序中编写return falseevent.preventDefault()。但是,它不会完美地工作。在 Javascript 中无法像这样完全控制焦点。

于 2009-10-13T13:40:48.167 回答
3

您可以阻止默认行为并停止事件传播,然后在处理程序中执行 this.focus() 。http://docs.jquery.com/Events/jQuery.Event。任何事件操作都应该在任何事件处理代码之前完成。

于 2009-10-13T13:42:53.583 回答
2

我不得不处理类似的事情——一个在无限循环中触发自身的 javascript 模糊处理程序;

解决方案是:

var inBlur = false;
jQuery('#the_input_element').blur(function(){
    if (!inBlur) {
        inBlur = true;
        jQuery('#some_other_input_element').focus();
        inBlur = false;
        }
    });

我知道这并不能回答所提出的确切问题,但它解决了这个主题(在 blur 函数中停止 jQuery blur 事件),因此它可能对某人有用。

于 2013-02-19T07:26:36.720 回答
1

不就是为了设置

$(this).focus();

在你的模糊功能里面的某个地方?

于 2009-10-13T13:35:19.737 回答
0

我认为在不重写遗留代码以使用参数的情况下防止 SQL 注入的最佳方法(此问题现已关闭)是将所有引号和反斜杠加倍(替换为''')。\\\

请注意,我不是 SQL 语法方面的专家,所以我不能保证这是不可理解的。

于 2009-10-13T16:39:02.457 回答