我的index.php正在对ajax.php进行ajax post调用,并将结果作为回显的json,然后使用js进行解析和显示。所以它是POST。我希望能够通过mydomain/index.php?q=foo&q1=foo1
等链接分享该结果。
这是基本的伪代码场景,不安全,我想建议如何以安全的方式实现这一点?
//index.php
//js
$.post('ajax.php', querystring, function(){
collect_result = result;
});
//ajax.php
parse($_POST);
echo json_encode(result);
// I want to be able to share result in way
http://.../index.php?q=foo&q1=foo1
//index.php
if(!empty($_GET['q]))
$querystr = http_build_query($_GET, '', '&');
<div id="div1" style="display:none"><?php echo $querystr; ?></div>
//then get it wuth jquery and make ajax.post()
$.post('ajax.php', $('#div1').html(), function(){
collect_result = result;
});
//BUT THEN USER IS ABLE TO DIRECT INJECT CODE INTO MY HTML (XSS)
//IS THERE SAFE WAY TO DO THIS SHARING VIA LINK???
答案 0 :(得分:1)
不确定你是否参考了这个,但正如w3schools中提到的那样:
htmlspecialchars()函数将特殊字符转换为HTML实体。这意味着它将替换像&lt;和&gt;与&lt;和&gt;。这可以防止攻击者通过在表单中注入HTML或Javascript代码(跨站点脚本攻击)来利用代码。
答案 1 :(得分:1)
我每天都在使用ajax处理这种困境。有时我甚至需要将密码和用户放在网址中。当敏感数据像这样可见时,我加密变量。我使用带有特殊键的php加密方法,并在通过POST接收变量时对其进行解码。如果您对此方法感兴趣,可以查看cbc加密/解密。我相信还有其他人,但cbc似乎是最安全的。 (一定要在php中启用mcrypt。)