下面的javascript做什么?

下面的javascript做什么?,javascript,php,html,cookies,Javascript,Php,Html,Cookies,我很难理解以下javascript的功能。在一次实验课上接受了它,甚至对它进行了测试(或者至少尝试了一下,因为它不像其他学生那样对我有效,它一直要求我登录,但从未显示欢迎信息)。实验室是关于XSS攻击的,讲师告诉我们这个脚本可以被利用,我不知道怎么做 不要介意这些评论;我添加它们是为了在跟踪代码时帮助我理解 <html> <head> <title>Mobile code:: XSS cookie example </title>

我很难理解以下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>

移动代码::XSS cookie示例
函数checkCookie(){
//下面是用于此函数的变量的初始化
var lf=“\n”//下一行的字符(lf=换行符)
var CookieString=document.cookie;//可以通过document.cookie属性访问cookie
var CookieSet=CookieString.split(“;”);//此操作以分号分隔document.cookie。CookieSet将成为一个数组,其中包含为此域和路径设置的所有cookie。
var SetSize=CookieSet.length;
var厨具;
var ReturnValue=”“;//如果找不到cookie,则设置默认的空返回
var x=0;
对于(x=0;((x
无论如何,我们非常感谢您帮助解释这一点。最后,我希望我的英语没有那么差


编辑:嗯,哇。。为什么这会被否决。。?请求帮助/解释有那么糟糕吗???

JavaScript与此无关。该漏洞是通过PHP进行的

用户输入(
$\u GET[“username”]
$\u POST[“username”]
):

  • 来自浏览器
  • 可由其他网站(或电子邮件)通过链接或表单提供给浏览器
  • 可以包含JavaScript
  • 直接输出到页面上,无需消毒

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

其中一些要求您准确理解$\u GET、$\u POST和$\u COOKIE超级全局函数的功能。以下是一些示例,说明如何利用这些资源,以及每种资源的含义

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

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

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

$\u COOKIE:无论何时有人访问您的站点,都会设置此超全局数组,并将其设置为用户对您站点的请求中检测到的由同一域访问的所有COOKIE。用户只需访问易受攻击的站点一次,或者使用适当的域创建cookie,然后输入用户名,例如root。当他们再次进入您的站点时,他们将作为该用户登录,而无需登录

除了这些漏洞之外,这里还有一些额外的问题,比如始终相信用户实际上正在使用您的站点(因为练习是关于XSS的,而不是站点的总体问题),但密码实际上从未被检查过,而且正如昆廷指出的那样,JavaScript实际上是毫不相关的。它对用户登录完全没有任何作用,因为PHP没有检查密码


我希望这能让你了解这里到底发生了什么。您似乎理解JavaScript ok,所以我不想赘述:)

它似乎主要易受攻击,因为超级机密密码直接存储在客户端可用的cookie中,因此任何用户都可以访问或窃取它。在PHP部分显示
$cur\u username
,unescaped易受XSS攻击。如果将恶意链接共享为
yourscript?username=
,则将执行
。您需要使用
htmlspecialchars($cur\u username)
来缓解它。我猜注释描述了整个代码。你真正想了解的是什么。因为这似乎是一项实验室作业(计算机科学专业?),你能做的最好的事情就是去找你的教授,告诉他们你不懂。你可能不是唯一一个没有理解的学生,这将允许教授以不同的方式解释问题。我在大学时就这样做了,让我们的教授重新解释一些东西(确切地说是OOP中的接口)。正因为如此,我对接口的理解达到了我从未想过的程度:)非常感谢您的回复,但我仍然不完全理解,比如for循环中的行在做什么?这个检查功能是如何工作的?等等,我真的没有任何先验知识