PHP表单验证之$_SERVER[“PHP_SELF“] 变量

前言

近来在复习PHP的知识,在php表单验证这块遇到了之前学习的htmlspecialchars() 函数,并且也再次理解了htmlspecialchars()函数的作用,及xss攻击形成的原因

$_SERVER[“PHP_SELF”] 变量

定义

  • $_SERVER[“PHP_SELF”] 是一种超全局变量,它返回当前执行脚本的文件名
  • $_SERVER[“PHP_SELF”] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息

利用

若页面使用了PHP_SELF,则用户可以通过输入下划线然后插入js代码执行跨站脚本(XSS)

以W3school中的例子为例:

若有一张名为 “test_form.php” 的页面中有如下表单:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

如果用户进入的是地址栏中正常的 URL:

http://www.example.com/test_form.php

则上面的代码会转换为:

<form method="post" action="test_form.php">

则一切正常

但如果用户在地址栏中键入了如下 URL:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacker')%3C/script%3E

在这种情况下,上面的代码会转换为:

<form method="post" action="test_form.php"/><script>alert('hacker')</script>

页面加载后,就会执行JS的弹窗代码

若该js代码不是普通的’hacker’弹窗代码,而是弹窗Cookie或其他隐私信息的代码,则有可能会出现信息泄露等安全问题

防御

使用htmlspecialchars() 函数将特殊字符转换为HTML实体,则此时js脚本将会进行实体编码,避免$_SERVER[“PHP_SELF”]被利用

例:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
编码后:
<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

htmlspecialchars() 函数

htmlspecialchars() 函数

猜你喜欢

转载自blog.csdn.net/Yoo_666/article/details/107825240