不';当通过ajax在结果中调用jquery.html()时,htmlspecialchars()是否可以防止javascript?
我编写了一个php和jQueryAjax脚本,效果很好。但是下面的脚本工作缓慢,我发现这种类型的脚本容易受到XSS攻击,我在这个链接的第一个答案中发现了一些与此相关的东西。以下是我的jquery代码:不';当通过ajax在结果中调用jquery.html()时,htmlspecialchars()是否可以防止javascript?,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我编写了一个php和jQueryAjax脚本,效果很好。但是下面的脚本工作缓慢,我发现这种类型的脚本容易受到XSS攻击,我在这个链接的第一个答案中发现了一些与此相关的东西。以下是我的jquery代码: <script> $(".question").keyup(function(){ var question = document.forms["myForm"]["question"].value; $.ajax({ type: "POST", url: "http://
<script>
$(".question").keyup(function(){
var question = document.forms["myForm"]["question"].value;
$.ajax({
type: "POST",
url: "http://www.example.com/view_result.php",
data: { question: question }
})
.done(function( msg ) {
$("#show_typing_question").html( msg );
});
});
</script>
$(“.question”).keyup(函数(){
var question=document.forms[“myForm”][“question”].value;
$.ajax({
类型:“POST”,
url:“http://www.example.com/view_result.php",
数据:{问题:问题}
})
.done(函数(msg){
$(“#show#u typing_question”).html(msg);
});
});
以下是view_result.php脚本:
<?php
function html_converter($val)
{
$turned = array('`<b>','`</b>','`<mark>','`</mark>');
$turn_back = array('<b>','</b>','<mark style="background-color:#999;">','</mark>');
$val = str_replace( $turned, $turn_back, $val );
$val = preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $val);
return $val;
}
$question = $_POST['question'];
$question = htmlspecialchars($question, ENT_QUOTES, 'UTF-8');
echo html_converter($question);
?>
如何在不使用ajax的情况下,仅使用jquery函数编写整个脚本。这个脚本安全吗?我想你是在问如何简单地避免客户端XSS攻击。我认为您目前正在使用PHP来“清理”来自用户的问题数据。如果这不是你要问的,请澄清你的问题 如果要使用来自用户的文本,请不要使用
.html()
进行设置,只需使用.text()
:
然后,不需要转义,因为您正在文本上下文中使用文本。对不起,我不清楚.html()和.text()。我试图只在textarea字段中显示用户键入的内容,我希望除了$turned array()中提到的一些内容外,所有输入都应转义。当用户快速键入时,此ajax系统会导致一些问题。是否可以只在jquery中完成所有的事情,这样就不需要加载?您尝试过我的答案了吗?它执行您想要的操作。jquery.text()将转义所有html标记,包括$tured变量中提到的标记。只有.html()适用于$turned变量的html标记。
$('.question').keyup(function(){
var question = document.forms['myForm']['question'].value;
$('#show_typing_question').text(question);
});