设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 网络编程 >> PHP教程 >> 确保PHP安全,不能违反的四条安全规则
精品推荐
PHP教程点击TOP10
·十天学会php之第一天
·绝对简单易学的PHP入门教程
·PHP 和 MySQL 基础教程(一)
·十天学会php之第二天
·详细讲解PHP编程中分页显示的制作
·PHP新手上路(一)
·十天学会php之第三天
·十天学会php之第四天
·十天学会php之第七天
·实例研究PHP函数isset和empty的区别
网络编程点击TOP10
·ASP.NET 程序中常用的三十三种代码
·从零开始学ASP.NET(基础篇)
·『原创』C#中TreeView类操作全攻略:建立树,新增节点,删除节点,修改节点,拖动节点,与Oracle数据库交互操作(一)
·C#编写的windows计算器-源代码
·官方水晶报表 .NET 应用程序实例下载 (C#、Visual C++.NET)
·VS.net 2005 Beta 下载地址(Express Edition)
·ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!
·c#操作word表格
·.NET 初 级 读 本
·用C#实现木马程序
精选专题

确保PHP安全,不能违反的四条安全规则

作者: 来源:http://www.xgdown.com/ 时间:2007-8-29 8:12:38

确保PHP安全,不能违反的四条安全规则(6) }
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<p><label for="name">Name</label>
<input type="text" name="name" id="name" size="20" maxlength="40"/></p>
<p><input type="submit" name="submit" value="go"/></p>
</form>

为 什么既提供 maxlength 属性,又在后端进行 substr() 检查?因为纵深防御总是好的。浏览器防止用户输入 PHP 或 MySQL 不能安全地处理的超长字符串(想像一下有人试图输入长达 1,000 个字符的名称),而后端 PHP 检查会确保没有人远程地或者在浏览器中操纵表单数据。

正如您看到的,这种方式与前一节中使用 strlen() 检查 GET 变量 pid 的长度相似。在这个示例中,忽略长度超过 5 位的任何输入值,但是也可以很容易地将值截短到适当的长度,如下所示:

清单 14. 改变输入的 GET 变量的长度

<?php
$pid = $_GET['pid'];
if (strlen($pid)){
    if (!ereg("^[0-9]+$",$pid)){
        //if non numeric $pid, send them back to home page
    }
}else{
    //empty $pid, so send them back to the home page
}
    //we have a numeric pid, but it may be too long, so let's check
    if (strlen($pid)>5){
        $pid = substr($pid,0,5);
    }
    //we create an object of a fictional class Page, which is now
    //even more protected from evil user input
    $obj = new Page;
    $content = $obj->fetchPage($pid);
    //and now we have a bunch of PHP that displays the page
?>

注 意,缓冲区溢出攻击并不限于长的数字串或字母串。也可能会看到长的十六进制字符串(往往看起来像 \xA3 或 \xFF)。记住,任何缓冲区溢出攻击的目的都是淹没特定的缓冲区,并将恶意代码或指令放到下一个缓冲区中,从而破坏数据或执行恶意代码。对付十六进制缓 冲区溢出最简单的方法也是不允许输入超过特定的长度。

如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。

清单 15. 防止十六进制字符串

<?php
if ($_POST['submit'] == "go"){
    $name = substr($_POST['name'],0,40);
    //clean out any potential hexadecimal characters
    $name = cleanHex($name);

共9页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [98 :>

确保PHP安全,不能违反的四条安全规则 相关文章:
确保PHP安全,不能违反的四条安全规则 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com