单 10. showResults.php
复制代码 代码如下:
<html>
<head>
<title>Results demonstrating XSS</title>
</head>
<body>
<?php
echo("<p>You typed this:</p>");
echo("<p>");
echo(
编写安全 PHP应用程序的七个习惯深入分析_网学
浏览:
POST[''myText'']);
echo("</p>");
?>
</body>
</html>
清单 11 提供了一个基本示例,在该示例中将弹出一个新窗口并打开 Google 的主页。如果您的 Web 应用程序不针对 XSS 攻击进行保护,则会造成严重的破坏。例如,某个人可以添加模仿站点样式的
链接 以达到欺骗(phishing)目的(请参阅 参考
资料 )。
清单 11. 恶意输入文本样例 复制代码 代码如下:
<script type="text/javascript">myRef = window.open(''http://www.google.com'',''mywin'',
''left=20,top=20,width=500,height=500,toolbar=1,resizable=0'');</script>
要防止受到 XSS 攻击,只要变量的值将被打印到输出中,就需要通过 htmlentities() 函数过滤输入。记住要遵循第一个习惯:在 Web 应用程序的名称、电子邮件地址、电话号码和帐单信息的输入中用白名单中的值验证输入数据。
下面显示了更安全的显示文本输入的页面。
清单 12. 更安全的表单 复制代码 代码如下:
<html>
<head>
<title>Results demonstrating XSS</title>
</head>
<body>
<?php
echo("<p>You typed this:</p>");
echo("<p>");
echo(htmlentities(
编写安全 PHP应用程序的七个习惯深入分析_网学
浏览:
POST[''myText'']));
echo("</p>");
?>
</body>
</html>
针对无效 post 进行保护 表单欺骗 是指有人把 post 从某个不恰当的位置发到您的表单中。欺骗表单的最简单方法就是创建一个通过提交至表单来传递所有值的 Web 页面。由于 Web 应用程序是没有状态的,因此没有一种绝对可行的方法可以确保所发布数据来自指定位置。从 IP 地址到主机名,所有内容都是可以欺骗的。清单 13 显示了允许输入信息的典型表单。
清单 13. 处理文本的表单 复制代码 代码如下:
<html>
<head>
<title>Form spoofing example</title>
</head>
<body>
<?php
if (
编写安全 PHP应用程序的七个习惯深入分析_网学
浏览:
POST[''submit''] == ''Save'') {
echo("<p>I am processing your text: ");
echo(
编写安全 PHP应用程序的七个习惯深入分析_网学
浏览:
POST[''myText'']);
echo("</p>");
}
?>
</body>
</html>
清单 14 显示了将发布到清单 13 所示表单中的表单。要尝试此操作,您可以把该表单放到 Web 站点中,然后把清单 14 中的代码另存为桌面上的 HTML 文档。在保存表单后,在浏览器中打开该表单。然后可以填写数据并提交表单,从而观察如何处理数据。
清单 14. 收集数据的表单 复制代码 代码如下:
<html>
<head>
<title>Collecting your data</title>
</head>
<body>
<form action="processStuff.php" method="post">
<select name="answer">
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
<input type="submit" value="Save" name="submit" />
</form>
</body>
</html>
表单欺骗的潜在影响是,如果拥有含下拉框、单选按钮、复选框或其他限制输入的表单,则当表单被欺骗时这些限制没有任何意义。考虑清单 15 中的代码,其中包含带有无效数据的表单。
清单 15. 带有无效数据的表单 复制代码 代码如下:
<html>
<head>
<title>Collecting your data</title>
</head>
<body>
<form action="http://path.example.com/processStuff.php"
method="post"><input type="text" name="answer"
value="There is no way this i