正确转义javascript对象

时间:2019-05-13 23:36:16

标签: javascript php json object

给出一个对象:{"key":"pairs","are":"fun"},该对象被回显到const foo = <?php echo $bar ?>;之类的变量中。逃脱物体的正确方法是什么?我已经尝试过encode_json来转义所有双引号{\"key\":\"pairs\",\"are\":\"fun\"},从而不允许呈现该对象。我也尝试过esc_js,它将双引号转换为& quot;。如何正确转义对象并将对象返回到foo?应该{"key":"pairs","are":"fun"}逃出任何恶意内容。

1 个答案:

答案 0 :(得分:1)

如果使用class AtomSerializer(serializers.Serializer): uid = serializers.CharField() created_at = serializers.DateTimeField() updated_at = serializers.DateTimeField() charge = serializers.FloatField() mass = serializers.FloatField() def create(self, validated_data): return Atom(**validated_data) def update(self, instance, validated_data): for field, value in validated_data.items(): setattr(instance, field, value) return instance 本身生成JSON字符串,则在浏览器中将JSON分配给JavaScript变量的输出应该是相当安全的。 CALL sys.ps_truncate_all_tables(FALSE); 函数将转义字符,否则这些字符可能会使某些人在分配点插入代码。

但是,您还必须考虑如何使用键/值对中的值。如果期望整数,则可以通过wp_json_encode来运行该值,或者期望以后要注入到页面中的纯文本,可以通过wp_json_encode来运行。

例如:

intval

产生以下输出:

esc_html

附录:

<?php $map = [ 'key' => 'pairs', 'are' => '"; I document.write(\'fun trying to break out\')', 'i_am_expecting_plaintext' => esc_html('<a href="evillinkhere">Hello</a><script>evilscript();</script>'), 'i_expect_an_integer' => intval("90i"), 'some_html_allowed' => wp_kses('<a href="http://nisamerica.com/">here</a><script>dangerous();</script>', ['a' => array('href'=>array())]), ]; ?> <script>const foo = <?php echo wp_json_encode($map, JSON_PRETTY_PRINT); ?>;</script> 之前给您<script>const foo = { "key": "pairs", "are": "\"; I document.write('fun trying to break out')", "i_am_expecting_plaintext": "&lt;a href=&quot;evillinkhere&quot;&gt;Hello&lt;\/a&gt;&lt;script&gt;evilscript();&lt;\/script&gt;", "i_expect_an_integer": 90, "some_html_allowed": "<a href=\"http:\/\/nisamerica.com\/\">here<\/a>dangerous();" };</script> 的原因是您提供的字符串已经采用JSON表示法。 wp_json_encode的作用是获取本机PHP变量并将其转为JSON。实际上,它是{\"key\":\"pairs\",\"are\":\"fun\"}周围非常薄的包装。上面我的建议实际上只是用PHP生成映射,然后将那个馈给encoding函数,而不是先进行字符串表示,然后再尝试使其安全。