4

我有一个关于安全的问题。我有一个 Javascript 变量:

var toSearch = "something"

我想将此变量发送到另一个 php 页面。我正在使用会话:<?php session_start(); ?>

根据我的阅读,我需要使用 AJAX GET/POST 过程将此 javascript 客户端变量传递给 PHP 服务器端。

我知道可以这样做:

window.location.href = "myphpfile.php?name=" + javascriptVariable;

然后$_GET['name']是变量。我读过这不安全?是吗?

4

3 回答 3

2

它只是不安全的,取决于你用它做什么。任何人都可以在地址栏中输入他们喜欢的任何内容,而您无法控制。例如,我可以去

http://example.com/myphpfile.php?name=fuzzball

现在,这本身并不危险,但是如果我要放置一些 MySQL 代码,而您将其直接放在 MySQL 数据库中而没有进行任何处理,那就很危险了。如果我将 HTML 放入然后显示给其他用户,那么这很危险。

你所要做的就是记住,虽然 GET 和 POST 并不危险,但它们不能被信任为你所期望的那样,因此你应该确保它们在服务器端,在那里它可以被信任。

于 2012-11-25T01:15:11.990 回答
1

如果您不想强制页面重新加载,那么更好的解决方案是使用 ajax 请求。关于安全性是一样的,因此每个用户都可以轻松地操作查询字符串......我们有一个地址栏:)

window.XMLHttpRequest = window.XMLHttpRequest || window.ActiveXObject('MSXML2.XMLHTTP') || window.ActiveXObject('Microsoft.XMLHTTP');

var ajax = new XMLHttpRequest();

ajax.open('get', 'page.php?name=' + javascriptVariable, true);

if ( ajax.readyState == 4 && ajax.status == 200 )
{
    // ajax.responseText is the result from php server
    // ajax.responseXML is the result from php server
}

ajax.send(null);
于 2012-11-25T01:20:29.883 回答
-1

如果您不擅长 JavaScript 或 Ajax 请求,我建议您使用 jquery .ajax 方法。jQuery 的文档非常完善,非常适合初学者。

此外,您的变量设置不正确。应该:

var toSearch = "something";

所以请访问:http ://api.jquery.com/jQuery.ajax/开始。

如何执行此操作的示例。

JS:

function myFunction() {

    var toSearch = "something";

    $.ajax({
       url: 'mysite/action_page.php?toSearch=' + toSearch,
       success: function(data) {
          alert('Here is some data from the $_GET request: ' + data);
       }
    });

}

PHP:

<?php
   /**
     * I strongly suggest a security measure here
     * ie: if($_GET['token'] != $_SESSION['token']) die('access not permitted');
    */


   //init
   $search_string = '';

   //set
   $search_string = htmlspecialchars(trim($_GET['toString']), ENT_QUOTES);
   //TAKE A LOOK AT PHP.net IF YOU DON'T KNOW WHAT THE TWO METHODS ABOVE DO.  
   // will help prevent xss

   echo $search_string;

   //all done!
 ?>
于 2012-11-25T01:34:48.610 回答