回声$你好
您刚刚获得了一个 HTML 注入漏洞。如果有人将您的用户发送到:
http://www.example.com/madlib01.php?name=<script>stealYourCookies()</script>
你有问题。
是的,这是我的第一个 PHP 脚本。这不会使安全性成为可选的。这是每个教程都会犯的错误:从一开始就教授不好的做法,将正确性(和安全性,它是正确性的一个子集)视为可选的额外内容。
结果是大多数 PHP 代码都充满了漏洞。但是没有必要成为你的!每次将纯文本字符串放入周围的 HTML 上下文中时,请正确转义它:
echo htmlspecialchars($hello);
我倾向于定义一个名称比“htmlspecialchars”更短的函数来为我做这件事,因为我很懒。
<?php
function h($text) {
echo(htmlspecialchars($text, ENT_QUOTES));
}
$name= '';
if (isset($_REQUEST['name']))
$name= trim($_REQUEST['name']);
?>
...
<?php if ($name!=='') { ?>
<p> Hello, <?php h($name); ?>! </p>
<?php } ?>
<form method="get" action="madlib01.php">
<p>
<label for="namefield">Name:</label>
<input id="namefield" type="text" name="name" />
</p>
<p>
<input type="submit" />
</p>
</form>
现在,如果你说你的名字是 Mister <script>,页面会像这样问候你,尖括号等等,而不是尝试运行 JavaScript。这是正确的输出,因此也是安全的。