web脚本程序攻击的防范(2)
作者:lanker 来源:cnwill.com 发布时间:2007-10-18 13:29:00
要说COOKIES是容易忽略的地方,User-Agent 注入会另你意想不到,在HTTP1.1规范就定义了一个“User-Agent”头标,我们抓个包看看:
GET /bbsxp/images/skins/1/T_bg.gif HTTP/1.1
Accept: */*
Referer: http://localhost/bbsxp/Default.asp
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
Cookie: eremite=0; member_id=1; pass_hash=5140c3b61780e904b05d44f8d3193564; skins=1; ASPSESSIONIDQADBTQQA=AGIPJKACPGNICLMHAFEOBHKA; username=lanker; userpass=E10ADC3949BA59ABBE56E057F20F883E; onlinetime=2003%2D7%2D9+22%3A20%3A13; addmin=10
“User-Agent”用来鉴别浏览器。你在这个字符串中经常可以看到“Mozilla”的一些表单。应用程序使用“User-Agent”字符串来适应浏览器的特殊性,可以允许你指定特殊的字符串这就给我们注射的机会。动网的 User-Agent 注入是最好的说明和实例了。不明白的朋友可以看看 “动网论坛DVBBS漏洞及入侵一则”和“深入分析DVBBS7 User-Agent注入”这两篇文章。这可能就属于他们所说的包注入了。
然而对与一些纯数字的过滤最好莫过于用脚本语言的本身函数:
比如 asp 脚本可以用 cint,clong,isNumeric 这样的过滤可以说是最严格的一种了。PHP脚本里可以用intval 这样的函数。
对于不能过滤“<”和“>”情况下跨站的脚本的防范手段是,将所有的尖扩号都转化成对应的HTML编码。对于“<”表示成“<” 对与“>” 表示成“>” 需要特别注意的是对于上面所有的输入过滤都要在服务端进行,客户端的所有验证都会等于徒劳无用,可以很轻松的绕过。
好了上面的已经过滤的差不多了,是不是现在就万事大吉了呢?答案是否定的,对于一些数字字段还有许多潜在的错误使用方法。即使我们限制了数据必须是数字的值,还是会引起一些错误,所以我们下面要做的是边界的检查,你不要小视边界检查哦,某些时候他会暴出你的绝对路径来地。
一般需要我们注意检查的有:布尔值,数字,和字符串的长度。
最后一个编写程序中注意的就是要有恰当的错误捕捉机制,无论采用什么样的语言编写程序,都应该有象C#,JAVA中的Try,Catch机智来捕获出错信息。对于程序遇到异常错误时能够正常终止运行。在出错的提示页中应该尽量不要包含系统的信息。
总结:上面是我个人在学习中总结的一些经验,希望能对编程人员编写安全健壮的代码有一定把帮助,如有错误的地方还请指教。


猜你喜欢
- 1. 前言在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请
- 在该网站下载你所需要的mysql依赖驱动版本,比如我的QT版本是5.15就下5.15版的 按照你的Qt编译版本和机器位数进行下载,
- 一、前言很多网站提供视频转GIF的功能,但要么收费要么有广告实际上我们通过python,几行代码就能够实现视频转gif二、教程1. 安装必备
- 利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。 其完整语法: GROUP_CONCA
- 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成。只有当各个部分都完成了,这个对象才完整。建造者模式
- 使用python实现双向链表,供大家参考,具体内容如下双向链表: 指的是讲数据链接在一起,每个数据是一个节点,每一个节点都有一个数据区,两个
- 前言Go语言的序列化与反序列化在工作中十分常用,在Go语言中提供了相关的解析方法去解析JSON,操作也比较简单序列化// 数据序列化func
- 在开发项目中,我们可以通过MySQL的慢查询日志对有效率问题的SQL进行监控。下面一些命令是开启日志:查找慢查询日志文件的目录show va
- 很多时候,我们都在说设计需要引导用户,尤其是在对初级用户的引导上,很大程度决定着产品能否快速聚拢用户的可能;但同样很多时候,用户并不需要引导
- 不过不得不说,datetime模块也有一些限制。 例如,当我们处理时区时,通常会显得短缺。有时,我们不得不引入一些第三方库作为补充。 此外,
- 什么是存储过程存储过程(Stored Procedure)也成为存储程序,是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。即
- 以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3],如下:>>>
- 本文实例讲述了jQuery实现弹出带遮罩层的居中浮动窗口效果。分享给大家供大家参考,具体如下:<!doctype html>&l
- 在网上找到的随机不重复查询代码:select top 15 * from article&
- 维护是什么,维护就是修改,不断的修改,但是要保证你的html和css有清晰的版本界定,有扩展性,不要因为做的太死而重新去做这个页面。一个赚钱
- 先看示例i=1menu=["B超室","化验室"]user="张来,黎明,常冒
- 本文实例讲述了python socket多线程通讯方法。分享给大家供大家参考,具体如下:#!/usr/bin/evn python"
- 一、查看可用字体import pygameprint(pygame.font.get_fonts())二、设置字体1.使用系统字体self.
- 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value
- 发现问题图片地址如下http://qximg.lightplan.cc/2016/09/11/1473574486942944.jpeg需要