zoukankan      html  css  js  c++  java
  • PHP_SELF漏洞

    今天在先知社区阅读代码审计技巧,无意发现一个之前没怎么接触过的漏洞------PHP_SELF漏洞,于是决定学习一些这个漏洞的原理,找到了一篇比较好理解的文章,作为一个转载吧。

    什么是PHP_SELF变量?

    PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)。您可以在FORM的操作字段中使用此变量。您还需要注意某些漏洞。
    a)假设您的php文件位于以下地址:
    http://www.yourserver.com/form-action.php
    在这种情况下,PHP_SELF将包含:"/form-action.php"
    b)假设您的php文件位于以下地址:
    http://www.yourserver.com/dir1/form-action.php
    
    对于此URL,PHP_SELF将为:"/dir1/form-action.php"     --------- 总之就是域名之后的一部分。

    在表单的action字段中使用PHP_SELF变量

    PHP_SELF变量的常见用法是在<form>标记的action字段中。当用户按下“提交”按钮时,FORM的操作字段指示提交表单数据的位置。通常与表单的处理程序具有相同的PHP页面。
    使用PHP_SELF变量,您可以编写更多通用代码,可以在任何页面上使用,而无需编辑操作字段。
    考虑一下,你有一个名为form-action.php的文件,并希望在提交表单后加载相同的页面。通常的表单代码是:
    <form  method="post" action="form-action.php" >
    

    我们可以使用PHP_SELF变量而不是“form-action.php”。代码变成:

    <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
    
    <?php
    if(isset($_POST['submit'])) 
    { 
        $name = $_POST['name'];
        echo "User Has submitted the form and entered this name : <b> $name </b>";
        echo "<br>You can use the following form again to enter a new name."; 
    }
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">  //php代码优先于HTML执行
       <input type="text" name="name"><br>
       <input type="submit" name="submit" value="Submit Form"><br>
    </form>
    
    此PHP代码位于HTML部分之上,将首先执行。第一行代码是检查表单是否已提交。提交按钮的名称是“提交”。
    按下提交按钮时,$_POST['submit']将设置并且IF条件将变为真。在这种情况下,我们显示用户输入的名称。
    如果表单未提交,IF条件将为FALSE(假),因为没有值$_POST['submit'] ,PHP代码将不会被执行。在这种情况下,仅显示表单。

    PHP_SELF漏洞利用:

    PHP_SELF变量用于获取当前文件的名称和路径,但黑客也可以使用它。如果在页面中使用了PHP_SELF,则用户可以输入斜杠(/),然后输入一些跨站点脚本(XSS)命令来执行。
    考虑用户通过在浏览器的地址栏中输入以下URL来调用此脚本:
    http://www.yourdomain.com/form-action.php/"><script>alert('xss')</script><foo"
    
    在这种情况下,PHP处理后代码变为:(其实也就是就是改变了DOM树的结构
    <form name="test" method="post" action="form-action.php"/>
    <script>alert('xss')</script><foo"">
    



      




  • 相关阅读:
    服务器迁移的标准
    WMS日常运维_WJC
    WMS 162服务器空间满,清日志
    从壹开始【学代码】|| 我开发中的用到的几个框架
    从壹开始 [ Ids4实战 ] 之七 ║ 客户端、服务端、授权中心全线打通
    从壹开始 [ Design Pattern ] 之二 ║ 单例模式 与 Singleton
    从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置
    从壹开始 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书【已完成】
    回答
    三行
  • 原文地址:https://www.cnblogs.com/Qiuzhiyu/p/13121420.html
Copyright © 2011-2022 走看看