如何设计网站中的上传功能(如何设计网站中的上传功能图片)-编程知识网

如何设计安全的文件上传功能

我们的老朋友PDP这两天在BlackHat 08上做了一个关于GIFAR的讲座。和往常一样,PDP的东西基本都是淫秽的,这个也是。题目讲的是如何把GIF或者JPG文件和JAR文件捆绑在一起,然后骗服务器以为是GIF或者JPG文件,结果发现JAR是在客户端JVM中执行的。

他还举了一些作弊的例子。比如office2007,doc文件其实是zip格式的,里面全是xml,所以他把jar文件打包成zip文件,把后缀改成doc来作弊。

这里是客户端的问题,我想到了其他的问题,比如安全上传。

根据以往经验,我们可以为文件上传设计以下安全规则:

1.文件上传的目录被设置为不可执行。

2.判断文件类型

3.单独设置文件服务器的域名。

4.重写文件名,文件路径不可预知。

第一条规则显然是为了降低执行动态语言脚本的风险。如果一个webshell上传成功,但无法执行,仍然可以起到纵深防御的作用。

第二,在判断文件类型时,我们一般要求用白名单代替黑名单,因为黑名单可能不完整,也可能造成一些绕过风险。

比如以前老版本的FCKEditor就有这种问题。它只是被列入黑名单,最后被绕过。

Apache有一个特性,就是解析第一个“.”后的文件后缀作为文件类型。例如,fvck.php.rar.rar.rar将被apache解析为fvck.php。最近看了php的手册。在安装文档中,有一个针对此问题的特殊说明:

15.告诉Apache将某些扩展解析为PHP。例如,让我们有

Apache解析。php文件。而不是只使用Apache AddType

指令,我们希望避免潜在的危险上传和创建

文件,如exploit.php.jpg被执行为PHP。用这个

例如,您可以将任何扩展解析为PHP,只需添加

他们。嗯补充一下。phtml来演示。

& lt文件匹配。php $ & gt

SetHandler应用程序/x-httpd-php

& lt/files match & gt;

IIS6也有这个类似的特性,就是当文件夹名为fvck.asp(fvck可以替换为任意值)时,这个文件夹中的任何文件都会被执行为asp

到目前为止,似乎微软还没有看到任何将该功能作为bug进行修复的迹象。

所以如果你不熟悉这些webserver的特性,你可能会觉得漏洞好神奇:我已经做了充分的限制,为什么还在“做俯卧撑”?

在判断文件类型时,大部分程序都是采用黑客攻击文件后缀的方法。这里要注意的主要是一些校验函数是否会以0字节结尾。在使用网络之前也有过类似的漏洞。您可以通过上传fvck.jpg%00.asp来绕过文件类型检查

我还看到只检查文件的头。这样也容易作弊。构造一个合法的gif文件头,然后在后面粘贴webshell。如果后缀是合法的,它也可以被浏览器解析:

GIF89a?

& lt马鞭phpinfo();马鞭& gt

再高级一点的就是多做一些文件格式检查,比如检查图片中像素的长度和宽度,然后再把图片压缩一遍,这样出来的图片基本上都是失真的,任何webshell也都被破坏了。

在检查文件格式时,通常会用到一些在网上已经打包好的类,这在扫描文件格式时是相当有优势的。但是,效率显然是检查大文件时要考虑的问题,很多程序员可能出于效率考虑不愿意选择这种方法。

但是今天从PDP中绑定文件的猥琐方法来看,需要详细检查文件格式,因为攻击者的目标可能不仅仅是服务器,还有客户端。如果要保证客户端,一定要详细检查文件格式,使其落入白名单。

再次,单独设置文件服务器域名也是对客户端的一种保护。这可能会避免许多跨域问题。如果发生XSS,攻击者可能需要突破跨域限制来进一步扩大成功。比如上传到crossdomain.xml,可能会导致flash的跨域问题。这些都是实实在在的风险。

第四,重写文件名和随机文件路径。这是为了隐藏风险,现在尽责的程序员基本都是这么设计的,也是非常实用有效的手段,可以把风险降到最低。

应该注意的是,构造随机文件名或路径的算法需要足够“随机”,而不是直接从cookie之类的地方获取散列。更好的方法是在服务器上使用类似random()的函数来生成它。相信程序员还是有这个意识的,这里就不赘述了。

域名怎么连接到自己的网站上?

首先你要在你架设的IIS上绑定自己的域名,然后在服务商就是你申请域名的地方给你提供的DNS服务器上把你的域名解析到你的IP上也就是你服务器的IP上 就可以了 发布自己的网站:

1.你要会做网页进而回做一个网站 不会做也没关系 你有就行

2.有一个自己的服务器 会很贵 没有很多钱的话可以去网上租一个虚拟服务器 把自己的域名绑定到服务器上

3.把你的网站上传到你的服务器上面 再把域名解析到你的服务器IP上 解析域名的地方是你申请域名的服务商提供给你的4.就能在浏览器输入你的域名打开你自己的网站了注意:如果自己有服务器,而服务必需要有一个外网公开的IP,如果是动态的IP别人是访问不上的。以上几点希望能帮到你。