- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个 stdClass
PHP 中的对象,类似于
$o = new stdClass;
$o->foo = $bar
变量$bar
包含不受信任的字符串。
下面的PHP模板代码是否足够的XSS保护
<script type="text/javascript">
var o = <?php echo json_encode($o); ?>;
</script>
我最初的直觉 react 是是安全的,因为将对象编码为 JSON 将确保任何潜在的 javascript 攻击都将通过作为 JSON 字符串属性对象包含在内而呈现惰性。像这样
$o = new stdClass;
$o->foo = "<script type=\"text/javascript\">alert(document.cookie)</script>";
?>
<script type="text/javascript">
var o = <?php echo json_encode($o) ?>;
</script>
结果是这样的
<script type="text/javascript">
var o = {"foo":"<script type=\"text\/javascript\">alert(document.cookie) <\/script>"};
</script>
如果已知这是不安全的,是否有一种标准的、成熟的方法来序列化一个简单的 stdClass
对象到 JSON 字符串以在 <script/>
中使用HTML 文档的一部分。
期待第一个快速回答,我意识到剥离任何 HTML 标记,或者以其他方式对 JSON 对象的每个元素进行 XSS 过滤都可以,但我正在寻找一种简洁的方法来做到这一点。类似于这个
//$eBar = addslashes($bar);
$sql = sprintf("SELECT * FROM table WHERE foo = '%s'",mysql_real_escape_string($bar));
还有这个
$sql = $db->select('SELECT * from table where foo = ?', $bar);
(在大多数情况下)在功能上是等效的,但后者被认为是更好、更安全的代码,因为最终程序员用户不需要担心转义方案。
最佳答案
似乎这个问题的最佳答案在于 another question .
总而言之,PHP 的 JSON 编码器会转义所有非 ASCII 字符,因此无法插入换行符/回车符来破坏 JSON 属性的 Javascript 字符串部分。这可能不适用于其他 JSON 编码器。
但是,将原始字符串传递给 JSON 编码可能会导致一连串的 XSS 攻击,建议使用以下常量组合。
var v= <?php echo json_encode($value, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS); ?>;
或确保传递给json_encode
的变量确实是一个对象。
关于php - json_encode 是否足够的 XSS 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062146/
我正在尝试使用 twig json_encode 函数,但是当我这样做时 var packageDetails = {{(packageDetails|json_encode)}}; pac
我正在尝试使用 twig json_encode 函数,但是当我这样做时 var packageDetails = {{(packageDetails|json_encode)}}; 而pa
不要重新发明轮子,我指的是已经存在的 Cyrillic characters in PHP's json_encode . 问题是:这些字符是什么,它们是什么意思:\u0435、\u0434 等等?我
这是我目前的脚本: //... PDO CONNECTION AND QUERY //...* $result = $dbh->query($sql)->fetchAll(PDO::FETCH_A
我正在使用 PHP 5.2.x 并希望仅使用私有(private)成员对自定义 PHP 类的对象进行编码。其中一个私有(private)成员是另一个自定义类的对象数组。 我尝试了 https://st
$emailFields = array( array( 'name' => 'comments', 'type' => 'html', 'c
我将一些数据放入我的 mysql 数据库中,它运行良好。但是当我使用 json_encode 获取数据时,我会像这样返回: {"idpostdata":"49","artID":null,"times
我目前正在从mysql表中获取值。这些值是从foreach循环中获取的。然后,在完成循环之后,将数组转换为json对象。但是我在获取json格式以便与其他api结合使用方面遇到困难。我的循环仅在有两个
我有一些与 json_encode 相关的问题:我需要使用一个大数组(几个 100k 项),每个都有非常简单的结构(一个键,一个字符串值)。 json_decode 工作正常,但只要我想对它进行 js
我想出了如何获得我想要的结果(几乎)。我的代码在最后一个 ] 之前添加了一个逗号,所以它不会完全起作用。我知道我可以使用 Json_encode 从我的外部 json 构建我的数组,但我很难过。我要么
我有一个数组,其中包含一些字符串值和一些数值。我用过 json_encode 将数组转换为 json 数组,但它将数字值转换为我不想要的字符串。 [["India","2"],["Panama","
我在 PHP 中有以下示例代码: $data = array( 'hello', 'world', 'hi' ); $ret = array(); $ret['test'] = array();
我正在使用 json_encode 从数组创建一个 JSON 对象。它们的数组有几百个元素长,但 json_encode 似乎只返回数组的第一个元素。 这是 json_decode 的限制,还是我使用
所以这是我的 php 这给了我一个像这样的 JSON [{"name":"Flipkart"},{"name":"jagdish"},{"name":"mm"},{"name":"mouse"},{
看来 json_encode 对我的 PHP 文件中可以包含哪些其他内容非常挑剔。这很好,因为我只是在文件 A(使用 json_encode)自己的文件中执行我通常会执行的操作。 我只是想我会问,因为
我使用这个简单的代码将数据库查询结果转换为 JSON 格式: $result = $mysqli->query(" SELECT date as a , su
我有一个 PHP 代码,需要将数据库表数据编码为 json。所以我使用了 json_encode()。 我使用此处给出的表格 - http://www.geekality.net/2011/08/21
Warning: json_encode(): recursion detected in [Directory] 这个错误是什么,我似乎无法解决这个问题。它针对每个遇到的错误 500 生成一个 B
再次遇到障碍..我需要从 json 文件中编码一系列值,该范围之外的所有内容都将为空。关于如何实现这一目标有什么建议吗? 例如:如果 json 值 >100,则将值返回到新数组中,如果 json 值
我正在创建一个简单的上传脚本。我使用一个简单的表单让人们上传图片,然后外部 php 脚本将上传图片并将一些变量返回到上传页面。 但我无法让部分变量返回工作。目前我正在使用这个: 还包含表单的页面: f
我是一名优秀的程序员,十分优秀!