Php 向用户显示json时使用XSS
我通过jQuery获得了一些JSON格式的数据,然后我需要将其显示给用户,但是它容易受到XSS攻击。在这里我有什么选择,我应该在把数据放入数据库之前去掉字符吗?我正在使用的框架(Kohana)有一个漂亮的函数Php 向用户显示json时使用XSS,php,javascript,jquery,json,xss,Php,Javascript,Jquery,Json,Xss,我通过jQuery获得了一些JSON格式的数据,然后我需要将其显示给用户,但是它容易受到XSS攻击。在这里我有什么选择,我应该在把数据放入数据库之前去掉字符吗?我正在使用的框架(Kohana)有一个漂亮的函数HTML::Chars(),但由于我使用javascript显示数据,因此无法在那里使用它 一种选择似乎是遍历被json编码的每个数组元素,并应用HTML::Chars()到它。这是唯一的选择吗?如果是的话,最佳的方法是什么 例如: 用户输入一些数据:标题,正文 数据被存储到数据库中 然后其
HTML::Chars()代码>,但由于我使用javascript显示数据,因此无法在那里使用它
一种选择似乎是遍历被json编码的每个数组元素,并应用HTML::Chars()代码>到它。这是唯一的选择吗?如果是的话,最佳的方法是什么
例如:
用户输入一些数据:标题,正文
数据被存储到数据库中
然后其他一些用户进入站点,从数据库中获取数据数组
并导出为json格式
我的jQuery脚本使用json并将新元素添加到
我的页面主体
代码:
$(document).ready(function(){
$.ajax({
url: '/timeline/latest/1',
dataType: 'json',
success: function(data){
$.each(data, function(key, val) {
switch (val.type){
case 'post': // I have only made post so far
addPost(val);
break;
}
});
}
});
})
function addPost(val){
$('.content .timeline').prepend(val.title + '<br />' + val.body); // xss vulnerable
}
我建议你像Drupal那样做
Drupal不过滤任何输入。如果要显示此HTML代码而不进行过滤,则它会在数据库中存储带有XSS漏洞的文本
相反,它对输出进行过滤。您绝对应该在服务器端这样做
您应该从Drupal使用的函数中获得启发
确保它适用于您的每个条目。当然,如果可以的话,可以在全球范围内这样做,如下所示:
// In the Model_Timeline class
public function Latest( $id ) {
// Get your array, and then
foreach ( $array as $entry ) {
// Filter each entry
// I use $util->filter_xss but use it how you implemented it
$entry = $util->filter_xss( $entry );
}
// And return the filtered array
return $array;
}
在将mysql\u real\u escape\u字符串存储到数据库之前,应该调用它,htmlspecialchars是可选的。您的问题是,您不想只向用户显示html,因此htmlspecialchars将无法工作,因为它编码的内容类似于如何容易受到XSS攻击?如果我键入javascript,它将执行它。示例:我在body字段中键入这个哦,我明白你的意思,让我给你写一个答案。不需要mysql\u real\u escape\u string()代码>因为它可以防止SQLInjection,因为我使用的是NoSQL,所以不可能在我的网站上执行sql注入。
array_walk($latest, function(&$latest){
foreach ($latest as &$key){
$key = HTML::chars($key);
}
});
// In the Model_Timeline class
public function Latest( $id ) {
// Get your array, and then
foreach ( $array as $entry ) {
// Filter each entry
// I use $util->filter_xss but use it how you implemented it
$entry = $util->filter_xss( $entry );
}
// And return the filtered array
return $array;
}