AJAX jquery发布数据对浏览器/客户端操作是否安全

时间:2016-11-04 13:35:57

标签: javascript php jquery ajax

像这样测试代码。我有2页。在第一页,......

<head>
        $(document).ready(function(){
            $("#btn").click(function(){
               $.ajax({
                                  type: 'POST',
                                  url: 'test2.php',
                                  data: { name: 'doflamingo'},
                                  success: function(response) {
                                    $('body').html(response);
                                  }
                              });
            });
        });
</head>
<body>
        <input type="button" value="Click" id="btn">
</body>

和test2.php

<?php
echo $_POST['name']
?>

如果我点击第一页上的按钮,它将显示&#34; doflamingo&#34;文本。 但是,如果我去浏览器的Firebug并编辑&#39; doflamingo&#39;到了&#39; luffy&#39;然后点击按钮,它仍会显示“doflamingo”#39;。那么这意味着AJAX jquery对黑客的安全性是否正确?我不需要增加更多的担保权吗?  我也将test2.php中的url编辑为random.php,但url仍然是&#39; test2.php

1 个答案:

答案 0 :(得分:1)

行为是正确的,因为javascript在加载后加载到浏览器内存中。

因此,如果您同样获取html元素的值,则会发生变化。

有一些要考虑安全性的要点:

浏览器默认情况下会实现HTTP访问控制(CORS),请参阅此处的更多参考: CORS

所以基本上这意味着默认情况下你可以从你自己的域中重新提出请求。

但是,如果您一次加载页面并尝试在浏览器的f.example检查器中注入javascript恶意代码,该怎么办?请求将来自用户,因此您无法知道此请求是否是有效请求...

这称为CSRF(跨站点请求伪造)或XCSRF(带有ajax)。

尝试处理它的一种简单方法,可以通过良好的行为来检查请求...

F.例如,你有一个页面,首先是渲染,然后用户会发出请求:

  • 服务器端执行脚本并将html发送到浏览器,因此我们可以附加该“呈现页面”的标识符

    /**
    * Preventing CSRF
    */
    
    $time = time();
    $_SESSION['time'] = $time;
    
    $salt = 'gxYrE9G5kxlPcPOC1DSTWOehgw9Rb6FQ9q2qr5vpCPhBV418Q9TUYUK91cvd';
    $_SESSION['token']= sha1($salt . $time);
    ...attach this token in a hidden input on html
    
  • 页面现在使用隐藏输入或元标记内的令牌或其他内容呈现,因此当您发出ajax请求时,必须将此令牌包含回服务器,并在发送html之前检查您是否已存储:

    $_POST['crsf'] !==$_SESSION['token']
    

永远不要相信用户请求,过滤所有数据,并且您可以尽可能地进行常规检查,例如,最小化请求限制,(仅在请求之间存储差异,如果这是更长的n秒丢弃。 ..)。

所以肯定你的答案不是,ajax对于浏览器/客户端操作并不安全,因为任何技术都不是100%没有安全问题的技术。