清理用户输入以显示并允许所有字符?

时间:2010-07-03 01:03:02

标签: php json sanitization

我需要能够在DOM中安全地显示用户输入的文本,并且我目前正在使用以下JS来执行此操作(它限制接受哪些字符)。

但是,现在我想允许所有角色。我如何接受所​​有字符,但对它们进行编码,以便用户无法执行脚本或做任何不好的事情。

function displayUserInput() {
    var status = $('#text_input').val();
    status = stripName(status);
    $.ajax({ type: 'POST', url: "api.php?status="+escape(status), success: function(data){
          // success
    }});
}

function stripName(name) { 
    var new_name = new String(name); 
  new_name = new_name.replace(/[^a-zA-Z0-9:\(\/\)\s\.,!~-]/g, ''); 
    return new_name; 
}

在PHP方面,我在将用户输入的文本保存到数据库之前使用以下代码:

    $status_message = $_REQUEST['status'];
    $status_message = preg_replace("/[^a-zA-Z0-9:\(\/\)\s\.,!~-]/", "", $status_message);
    $status_message = mysql_real_escape_string($status_message);

似乎我当前的方法清理输入正常,但我想接受完整的字符集。此外,我看到一些问题,例如一个用户输入的文本块显示为:

u0627u0644u0644u0647 u0627u0643u0628u0631u0645u0646 u0627u0645u0631u064Au0643u0627

我假设在编码/解码过程中出现了问题......

2 个答案:

答案 0 :(得分:2)

要确保数据在页面上的显示安全,您只需要转义<>,然后分别将其替换为&lt;&gt;。当保存到数据库时,MySQL像往常一样逃脱。我不明白为什么你需要像现在这样的所有正则表达式。

答案 1 :(得分:1)

我知道这个帖子已经过时且不活跃,但我的理解是只是逃避“&lt;”和“&gt;”还不够。它甚至不足以逃避五个主要的HTML字符。有关详细信息,请参阅http://wonko.com/post/html-escaping