编写安全 PHP应用程序的七个习惯深入分析(4)


function open($save_path, $session_name)
{
    /* custom code */
    return (true);
}
function close()
{
    /* custom code */
    return (true);
}
function read($id)
{
    /* custom code */
    return (true);
}
function write($id, $sess_data)
{
    /* custom code */
    return (true);
}
function destroy($id)
{
    /* custom code */
    return (true);
}
function gc($maxlifetime)
{
    /* custom code */
    return (true);
}
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");


针对 XSS 漏洞进行保护
XSS 漏洞代表 2007 年所有归档的 Web 站点的大部分漏洞(请参阅 参考资料)。当用户能够把 HTML 代码注入到您的 Web 页面中时,就是出现了 XSS 漏洞。HTML 代码可以在脚本标记中携带 JavaScript 代码,因而只要提取页面就允许运行 JavaScript。清单 9 中的表单可以表示论坛、维基、社会网络或任何可以输入文本的其他站点。
清单 9. 输入文本的表单

复制代码 代码如下:


<html>
<head>
<title>Your chance to input XSS</title>
</head>
<body>
<form action="showResults.php" method="post">
<div><textarea rows="4" cols="30"></textarea><br />
<input type="submit" value="Delete" /></div>
</form>
</body>
</html>


清单 10 演示了允许 XSS 攻击的表单如何输出结果。
清单 10. showResults.php

复制代码 代码如下:


<html>
<head>
<title>Results demonstrating XSS</title>
</head>
<body>
<?php
echo("<p>You typed this:</p>");
echo("<p>");
echo($_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($_POST['myText']));
echo("</p>");
?>
</body>
</html>


针对无效 post 进行保护
表单欺骗 是指有人把 post 从某个不恰当的位置发到您的表单中。欺骗表单的最简单方法就是创建一个通过提交至表单来传递所有值的 Web 页面。由于 Web 应用程序是没有状态的,因此没有一种绝对可行的方法可以确保所发布数据来自指定位置。从 IP 地址到主机名,所有内容都是可以欺骗的。清单 13 显示了允许输入信息的典型表单。
清单 13. 处理文本的表单

复制代码 代码如下:


<html>
<head>
<title>Form spoofing example</title>
</head>
<body>
<?php
if ($_POST['submit'] == 'Save') {
    echo("<p>I am processing your text: ");
    echo($_POST['myText']);
    echo("</p>");
}
?>
</body>
</html>


清单 14 显示了将发布到清单 13 所示表单中的表单。要尝试此操作,您可以把该表单放到 Web 站点中,然后把清单 14 中的代码另存为桌面上的 HTML 文档。在保存表单后,在浏览器中打开该表单。然后可以填写数据并提交表单,从而观察如何处理数据。
清单 14. 收集数据的表单

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4d932b1638724203594054ffc9c0fa03.html