所有输入都是不可信任的
如果编写安全的代码?实际上应该很难实现这个想法,由于系统和环境的原因,即使很努力的想编写安全的代码,依旧会遇见不期望的事情,我们所能做到,就是尽量去考虑是否被用户的过滤做的足够了。[b]1,你也许没有注意的。[/b]
用户所提交的变量的处理都是经过我们的代码来做的,如果要编写合理的代码,就要先确定用户的输入是否合理,我曾经见过防止SQL注射时候使用了类似下面的代码。
[code]<?php
if($_GET['text']<10) echo'小于10了你。';
?>[/code]
大概大家所见过关于数字的大小都是会先考虑这个是不是数字,应该很少有人会想,如果我们不去用一个数字来进行大小比较会怎么样。
上面的代码我们提交[url=http://10.0.1.85/test.php?text=a]http://10.0.1.85/test.php?text=a[/url]的时候会提示我们小于十,而我们提交[url=http://10.0.1.85/test.php?text=50a]http://10.0.1.85/test.php?text=50a[/url]的时候则不会提示这一句话。
在实际的操作过程中,如果是进行SQL注射,那么在这里依旧可以尝试[url=http://10.0.1.85/test.php?text=50%20and%201=1/]http://10.0.1.85/test.php?text=50%20and%201=1/[/url]*#这样的Url进行测试。
[b]2,php手册也许没有告诉你的。[/b]
从php手册学习php一直是一个过程,其实尽管php本身会说register_globals = On是不安全的,但是在手册里提供的代码例子依旧都是采用这样的方式编写的,而其他的事情或许php也忘记了告诉我们,或是说,仅仅是在“[b]说明[/b]”下简单的写了一行。
例如下面这样的代码:
[code]<?php
echo urldecode($_GET['text']);
?>[/code]
php手册上关于urldecode这个函数,说明下面有一行关于函数的使用,非常简短的一句话。
[quote]
string [b]urlencode[/b] ( string str )
[/quote]
其实这里应该说的很清楚了,但是可能本身所告诉大家的只是说这个函数使用方式是函数名加字符串,但是如果不是字符串呢?
[url=http://10.0.1.85/test.php?text[]=as]http://10.0.1.85/test.php?text[]=as[/url]
我们会得到类似下面这样的错误输出,泄露Web服务器的真实路径。
Warning: urldecode() expects parameter 1 to be string, array given in D:\www\htdocs\test.php on line 2
[b]3,php手册可能明确告诉你了的[/b]
有的时候php手册可能很清楚的在手册里写明了确实不可以做的事情,例如Mktime这个函数,现在的日历大多都使用了这么一个函数,这个函数之前在手册上有段描绘(因为之前我看的时候还没有php5,所以现在的描绘和过去是不一样的,:)
[quote]
year 年份数,可以是两位或四位数字,0-69 对应于 2000-2069,70-100 对应于 1970-2000。在如今系统中普遍把 time_t 作为一个 32 位有符号整数的情况下,year 的合法范围是 1901 到 2038 之间,不过此限制自 PHP 5.1.0 起已被克服了。
[/quote]
也就是说,曾经,或是说依旧在php5.1.0之前的版本里,mktime这个函数在大于2038的时候是不会正常的,而我们当前的关于日历的代码是否都已经判断了对方提交的年是否超过了2038么?
[b]4,用户的输入究竟在哪里[/b]
用户的输入所存在的地方在你所能用的到所有变量里,直接可见的至少有以下几种。
GET,POST,COOKIE,SESSION,FILES,SERVER
不可见的则是你从数据库,文本,缓存里读出来的用户曾经输入导致你记录下的数据。
[b]5,本文讲的就是说代码写得不好别人就能报个错么[/b]
其实我想说的是,用户的所有输入都是不可信任的,尽管写到后面或许变了样子,但是我并不是想说用户的不正规输入会导致你的脚本报错,它可能导致你脚本原来的设想失效,写入不期望的数据,跳到另外的if循环之类的,我没有过多实际的demo,实际上如果身为一个资深的程序员,在编写环境中注意这些,或许你的收获会更大且更有意思。
PS:行文仓促,可能文中有错误,涉及的东西可能也没有什么技术含量,望大家不要介意,你可以在这里发表你的经验,例如,[b]你甚至可以在这里告诉我们,你在用某函数操作某变量的时候遇上了很奇怪的事情。[/b]phper,要好好挖掘哦。:P ;P
[[i] 本帖最后由 mokfly 于 2006-12-28 10:13 编辑 [/i]]
强烈严重的顶一下。。。
顶下需要仔细看看;P 第二段写了不错啊。
收藏了。
好多人就是直接把手册的代码复制过来就用了。 关注~~~~~~~~~ 好! 黄金法则 老帖子了,新手可以看看 确实不错。顶 顶一下
页:
[1]
