Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JavaScript变量发送到PHP变量时的安全性_Php_Javascript_Ajax - Fatal编程技术网

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

将JavaScript变量发送到PHP变量时的安全性,php,javascript,ajax,Php,Javascript,Ajax,我有一个关于安全的问题。我有一个Javascript变量: var toSearch = "something" 我想把这个变量发送到另一个php页面。我正在使用会话: 根据我所读的内容,我需要使用ajaxget/POST过程将这个javascript客户端变量传递到PHP服务器端 我知道可以通过以下方式实现: window.location.href = "myphpfile.php?name=" + javascriptVariable; 然后$\u获取['name']变量。我听说这不安

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

var toSearch = "something"
我想把这个变量发送到另一个php页面。我正在使用会话:

根据我所读的内容,我需要使用ajaxget/POST过程将这个javascript客户端变量传递到PHP服务器端

我知道可以通过以下方式实现:

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

然后
$\u获取['name']
变量。我听说这不安全?是吗?

它只是不安全,这取决于你用它做什么。任何人都可以在地址栏中键入他们喜欢的任何内容,而你对此没有控制权。例如,我可以去

http://example.com/myphpfile.php?name=fuzzball
现在,这本身并不危险,但如果我放一些MySQL代码,而您将其直接放在MySQL数据库中,而不进行任何消毒,那么这是危险的。如果我输入HTML,然后向其他用户显示,那么这是危险的


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

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


如果您不擅长JavaScript或Ajax请求,我建议使用jquery.Ajax方法。jQuery的文档非常丰富,对于初学者来说非常棒

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

var toSearch = "something";
所以访问:开始吧

如何做到这一点的示例

JS:

PHP:


那么,您希望将变量“toSearch”发送到PHP,然后将其指向PHP响应的页面?在考虑安全性之前,考虑安全性是否足够在您的上下文中进行额外的工作。使用Ajax或使用JS重定向将有相同的安全性考虑,因为两者都在客户端完成。如果您知道如何正确地管理Ajax请求,安全性问题是最小的。尝试将存储在会话中的随机令牌发送到PHP页面。如果发送的令牌与会话令牌不匹配,则die('error');谢谢-我想我将使用“在URL中传递搜索”,然后阅读Kolink在下面提出的要点。否则,如果我有一个变量需要转换成php变量,有人能提供一个清晰的例子吗?谢谢-那么当你说“没有消毒的MySQL数据库”时,有什么核心点呢?Sae Us:进行谷歌搜索,php:htmlspecialchars和php:MySQL\u real\u escape\u string。他们会做你需要的一切。另一个好的PHP方法是Time-()HTMLFraseCARS和PHP:MySQLYRealOracle EngEype字符串不是100%安全的,也不会认为它们“足够好”,因为发送非UTF-8字符(另一个SQL注入攻击向量)的危险性。我建议转换为utf-8,然后在将变量插入查询之前应用mysql\u real\u escape\u字符串。更好的是,使用PDO。这篇文章有更多好的信息:
var toSearch = "something";
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
   /**
     * 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!
 ?>