PHP_SELF漏洞

什么是PHP_SELF变量?

PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)。您可以在FORM的操作字段中使用此变量。您还需要注意某些漏洞。我们将在本文中讨论所有这些要点。
我们现在看一些例子。
echo $_SERVER['PHP_SELF'];
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']; ?>" >

“form-action.php”的完整代码

这是组合代码,包含表单和PHP脚本。
<?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']; ?>">
   <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)命令来执行。
<form name="test" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
现在,如果用户在地址栏中输入了正常的URL,
http://www.yourdomain.com/form-action.php
则上述代码将被翻译为:
<form name="test" action="form-action.php" method="post">
这是正常情况。
现在考虑用户通过在浏览器的地址栏中输入以下URL来调用此脚本:
http://www.yourdomain.com/form-action.php/"><script>alert('xss')</script><foo"
在这种情况下,PHP处理后代码变为:
<form name="test" method="post" action="form-action.php"/>
<script>alert('xss')</script><foo"">

您可以看到此代码添加了脚本标记和警报命令。加载此页面后,用户将看到一个警告框。这只是一个如何利用PHP_SELF变量的简单示例。
可以在“script”标记之间添加任何JavaScript代码。<script>....HERE....</script>。黑客可以链接到可能位于另一台服务器上的JavaScript文件。例如,该JavaScript文件可以保存可以改变全局变量的恶意代码,也可以将表单提交到另一个地址以捕获用户数据。

一个有趣的练习



当我们的注入落在标记属性上时,我们试图突破它而没有成功,因为关闭标记并开始新标记所需的大于号(>)被替换为减号( - ):
因此,我们将尝试使用事件处理程序来使用内联注入:
再次没有成功,但这次是因为javascript块(第11行到第17行)清理了每个字符串,其中“on”后跟或不是间隔符(%09,%0A,%0C,%0D或%20)和document.location.href(第15行)中的等号(=),即处理URL的属性。
javascript函数eventFilter()在文档主体加载时调用(第3行),操作在运行时构建的页面(参见 DOM),因此尽管它在源上正确反映,但注入不起作用
但是如果我们创建一个任意属性并且只是保持其值打开,那么注入后的所有代码都将被更改为其值:

这样,只有当浏览器的HTML解析器找到下一个单引号(')时才会关闭“1”属性,该引用位于“不要做坏事”这个短语上。我们注入的表单标记将在下一个大于符号(>)中关闭,该标记位于</ h6>标记中。
输入字段与提交按钮一起消失,javascript函数完全禁用(全部从第8行到第18行)。因为在页面中没有更多元素可以交互,“style”属性也被“ - ”替换,我们不能在我们的目标标记之后注入任何东西,我们无法触发我们提供的事件处理程序
所以这是最后一招。在当前的Firefox浏览器中,我们有以下处理程序,在源代码中只需要一个脚本块来触发它们:

onafterscriptexecute

onbeforescriptexecute

在页面的congrats.js脚本中
我们只能使用后者:
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容