学习笔记_25_03_11

学习笔记_25_03_11

  以下是关于VUC中class activities中的一些问题。

Reference

$_SERVER数组、PHP_SELF变量和action的安全性

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的 array。这个数组中的条目由 Web 服务器创建,所以不能保证每个 Web 服务器都提供全部条目;服务器可能会忽略一些,或者提供此处没有列举出来的其它内容。然而,大部分变量在 » CGI 1.1 规范中都有说明,并且很可能会定义。

  其中,PHP_SELF就是其中包含的一个变量,其返回当前执行脚本的文件名。通过使用这一变量,我们可以在编写PHP文件时获得一种更加通用的架构,就如同相对路径一样,更加广泛,不再拘泥于不同的文件名。这也使得我们在修改文件名时不必再更改具体的代码。

  比如说:

1
2
3
<form action="<?=$_SERVER['PHP_SELF']; ?>" method="post">
// 在PHP语法中, <?= ... ?> 是一种<?php echo ...; ?>的简写形式
// 它将输出$_SERVER['PHP_SELF']的值

  而如果要考虑action变量的安全性的话,我们可以使用htmlspecialchars()函数,例如:

1
<form action="<?=htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">

  这里我们要防范的是跨站点脚本(XSS)攻击,这是一种黑客在表单中提交恶意代码来使得表单将提交到另一个地址来窃取用户数据的攻击方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 例如我们现在在test_form.php文件中有以下表单
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">

// 如果现在user在其中提交了一个正常的URL
// 例如:“http://www.example.com/test_form.php”
// 则这段代码将被转换为:
<form method="post" action="test_form.php">

// 但如果hacker输入一段恶意代码,例如:
// http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
// 那么这段代码将被转换为:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
// 这就将造成偏离网站创造者本意的活动

  而htmlspecialchars()函数是一种将预定义的字符<>等转换为HTML实体的函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

// HTML输出:
<!DOCTYPE html>
<html>
<body>
This is some &lt;b&gt;bold&lt;/b&gt; text.
</body>
</html>

// 网页输出:
This is some <b>bold</b> text.

  那么上边提到的恶意代码就将被转换为:

1
<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

  这将不会造成任何损失。


学习笔记_25_03_11
http://example.com/2025/03/11/note04/
作者
谢斐
发布于
2025年3月11日
许可协议