我需要能够在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
我假设在编码/解码过程中出现了问题......
答案 0 :(得分:2)
要确保数据在页面上的显示安全,您只需要转义<
和>
,然后分别将其替换为<
和>
。当保存到数据库时,MySQL像往常一样逃脱。我不明白为什么你需要像现在这样的所有正则表达式。
答案 1 :(得分:1)
我知道这个帖子已经过时且不活跃,但我的理解是只是逃避“&lt;”和“&gt;”还不够。它甚至不足以逃避五个主要的HTML字符。有关详细信息,请参阅http://wonko.com/post/html-escaping。