我的javascript正则表达式有时不起作用

时间:2016-11-20 11:15:58

标签: javascript php regex sanitization

我正在创建一个应用程序,用户可以在其中创建“帖子”和“评论”。一旦提交了这些帖子和评论,它们就会被ajax发送到php页面并插入到数据库中。然后从数据库中检索它们并立即插入到页面中而无需批准。 我希望有一个严格的正则表达式,以便不能提交有害文本,但也允许一些unicode字符,如重音元音。所以我的javascript正则表达式如下:

postRegex = /^([A-Za-z0-9\u00C0-\u017F \/.,-_$!\'&*()="?#+%:;\[\]\r\r\n]{1,1000})$/;

我的理论是如果我不允许括号如< >那么这可以阻止插入脚本标签。但是,当我尝试提交iframe嵌入代码等文本时,令我惊讶的是,表单已提交。

<iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/217462626&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe>

根据我对这个正则表达式的理解,我认为它不会让&lt;&gt;括号提交。

我的正则表达式似乎确实有效,因为它不提交表格时的字符为|在文本中。我的正则表达式中有错误吗?

如果有更好的方法可以阻止插入恶意内容,也可以给我建议。

在服务器端,我也在清理内容(在插入数据库之前),如下面的submit_post.php所示。

HTML表单:

<form id="post_form" name="post_form" method="post" action="">                                      
        <label for="post_text"></label>     
        <textarea id="post_text" name="post_text" maxlength="1000" placeholder="Write your post here..."  rows="2" data-role="none" required></textarea>
</form>

Javascript和JQuery:

$("#post_form").on('submit', function(e){
        //this will execute when a post is submitted.
        e.preventDefault(); 
        var text_of_post  = $('#post_text').val();

        var postIsValid = validateInput(text_of_post, postRegex);
        if(!postIsValid){
            console.log('not valid');
            //content of form is not valid
        }else{
            //content of form is valid
            $.ajax({
            //do an ajax request passing along the user json web token for validation on server side and also the text that was submitted.
                url: app_root_url + 'submit_post.php',
                data: {'usertoken': token, 'text_of_post' : text_of_post},
                type: "POST",
                success: function(data){
                var result = JSON.parse(data);
                }
            });
    }

});

function validateInput(inputValue, regularExpression){
        var inputIsValid = regularExpression.test(inputValue);
        return inputIsValid;
}

PHP: submit_post.php

$postText = filter_var($_POST['text_of_post'], FILTER_SANITIZE_STRING);

0 个答案:

没有答案