以下javascript做什么?

时间:2013-12-15 18:10:21

标签: javascript php html cookies

我无法理解以下javascript的功能。把它带到实验室会议中甚至测试它(或者至少尝试过,因为它不像其他学生那样与我合作,它一直要求我登录并且从未显示欢迎信息)。实验室是关于XSS攻击的,导师告诉我们这个脚本可能被利用,我不知道怎么样?

不介意评论;我添加它们是为了帮助我理解跟踪代码

<html>

  <head>
    <title>Mobile code:: XSS cookie example </title>
    <link rel="stylesheet" type="text/css" href="SecureM.css"/>
  </head>

  <body>
    <script language="Javascript">
    function checkCookie(){
      //Here is the initialization of variables to be used for this function
      var lf = "\n";        //character for next line (lf = line feed)
      var CookieString = document.cookie; //cookies are accessible through the document.cookie property
      var CookieSet = CookieString.split(';');  //This splits document.cookie on semicolons. CookieSet becomes an array containing all cookies that are set for this domain and path.
      var SetSize = CookieSet.length;
      var CookiePieces;
      var ReturnValue="";       //set default empty return if no cookie found
      var x = 0;
      for (x = 0; ((x < SetSize) && (ReturnValue == "")); x++){
        CookiePieces = CookieSet[x].split('=');
        if (CookiePieces[0].substring(0,1) == ' ' ){
          CookiePieces[0] =
            CookiePieces[0].substring(1, CookiePieces[0].length);
        }       //end if statement
        if (CookiePieces[0] == "superSecretPassword"){
          ReturnValue = CookiePieces[1];
        }       //end if statement
      }         //end for loop
      return ReturnValue;   
    }   //end checkCookie() function

    if (checkCookie() == ""){ // no cookie found, relocate to login.php
      window.location.href="login.php";
    }
  </script>

  <?
    if (isset($_GET["username"])){
      $cur_username = $_GET["username"];
    }
    else if (isset($_POST["username"])){
      $cur_username = $_POST["username"];
    }
    else if (isset($_COOKIE["username"])){
     $cur_username = $_COOKIE["username"];
    }
    else{
      $cur_username = "No Name";
    }
    echo "<strong>LOGIN SUCCESSFULL!</strong><br/><br/>";
    echo "<strong>Thank you, ".$cur_username." your information have been updated</strong>";
    //


  ?>
  </body>
</html>

无论如何,非常感谢帮助解释这一点。最后,我希望我的英语不是那么糟糕......

编辑:嗯,哇..为什么这会被投票......?请求帮助/解释是不是很糟糕?

2 个答案:

答案 0 :(得分:1)

JavaScript无关紧要。该漏洞利用是通过PHP。

用户输入($_GET["username"]$_POST["username"]):

  • 来自浏览器
  • 可以通过其他网站(或电子邮件)通过链接或表单提供给浏览器
  • 可以包含JavaScript
  • 直接输出到没有清理的页面

答案 1 :(得分:0)

我想发布一个更多信息的答案,尽管昆汀在指出答案方面做得非常出色。

其中一些要求您确切了解$ _GET,$ _POST和$ _COOKIE超级全局变量的作用。以下是一些关于如何利用这些内容的示例,以及各自的含义。

$ _ GET:只要有人向您的页面发出HTTP GET请求,就会设置此超全局数组,然后在服务器端执行PHP。当PHP代码检查它时,它可以通过URL访问传递给它的参数,这通常是创建GET请求的方式。鉴于此处使用的PHP代码,所有恶意用户都必须输入URL(在他们的代码中)

http://yourvulnerablesite.com/?username=root');         出口();

$ _ POST:每当有人向您的页面发出HTTP POST请求时,就会设置此超全局数组,然后PHP将被提供给服务器端。这可能不会像GET请求那样可能,因为它需要花费更多的精力来实现。它也不会那么有效,因为设置登录cookie的JavaScript可能无法运行。最简单的方法吗?一种浏览器扩展,允许使用指定的方法使用指定的参数进行任意HTTP请求,例如this one.

$ _ COOKIE:无论何时有人访问您的网站,都会设置此超全局阵列,并将其设置为用户对您网站的请求中检测到的所有Cookie,这些Cookie是同一个网站的网站。用户所要做的就是访问易受攻击的站点一次,或者使用适当的域创建cookie,然后输入用户名,例如root。当他们再次进入您的网站时,他们将以该用户身份登录,而不必转到http://myvulnerablesite.com

除了这些漏洞之外,还存在一些额外的问题,即始终相信用户实际上正在使用您的网站(因为练习是关于XSS,而不是网站的整体问题),但密码实际上从未被检查过,并且正如昆汀指出的那样,JavaScript完全无关紧要。由于未使用PHP检查密码,因此对于记录用户绝对没有任何意义。

我希望这能让您深入了解这里发生了什么。你好像理解了JavaScript,所以我不会过去那样:)