繁体   English   中英

将JavaScript变量发送到PHP变量的安全性

[英]Safety in sending JavaScript variable to PHP variable

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

var toSearch = "something"

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

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

我知道可以这样做:

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

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

这只是不安全的,具体取决于您对它的处理方式。 任何人都可以在地址栏中键入他们喜欢的任何内容,而您对此无能为力。 例如,我可以去

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

现在,这本身并不构成危险,但是如果我要放置一些MySQL代码,而又不进行卫生处理就将其直接放置在MySQL数据库中,那就很危险。 如果我输入HTML,然后将其显示给其他用户,则很危险。

所有您需要做的就是记住,尽管GET和POST并不危险,但是它们不能像您期望的那样被信任,因此您应该确保它们位于服务器端,可以信任。

如果您不想强制重新加载页面,那么更好的解决方案是使用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);

如果您对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!
 ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM