Submitted by gouki on 2008, July 30, 11:16 PM
很多时候,WEB开发人员为了偷懒,对于数据输入的长度仅在前台作了限制,而在POST提交页面并未进行判断,这时候很有可能会通过其他方法进行攻击(虽然,插入数据库后,可能会被自动截断,但。。。改改总是挺好玩的)
如:提交页面
XML/HTML代码
- <input type="text" name="msg_title" value="" id="msg_title" maxlength="3">
这样的INPUT框里面,你就只能输入3个字符了,怎么办?当然有办法了,在浏览器的地址栏里键入如下代码:
XML/HTML代码
- javascript:document.getElementById('msg_title').value='123456';void(0);
现在再看一下,是不是input框里面有6个字符了???
黑黑。。。
Tags: 限制
Javascript | 评论:1
| 阅读:20806
Submitted by gouki on 2008, July 30, 11:04 PM
TP的COOKIE类是被封装好的,里面包含了一些常见的操作,set,get,clear等等,其实TP的cookie类与其他的COOKIE有着明显的不同,那就是TP的COOKIE ID是唯一的(不好意思,在我写完这段的时候,为了防止写错,我又重新打开了cookie.class.php,却突然发现,现在的cookie功能与以前的不一样了。)
以前的set函数是类似于这样:
PHP代码
- $_COOKIE[C('COOKIE_ID')][C('COOKIE_PREFIX').$name] = $value ;
如今的又恢复成:
PHP代码
- $_COOKIE[C('COOKIE_PREFIX').$name] = $value;
既然如此,我还是按最新的稍作讲解吧。。。
Cookie类,固名思意,就是把对COOKIE的操作进行了封装,通过定义一个COOKIE名的前缀,以防与其他COOKIE产生冲突,然后加上COOKIE变量的名称,就可以进行赋值、取值等。
Cookie类所有的操作都采用了静态方法,即在实际应用中,只要加载了Cookie类,就可以随时使用了:
PHP代码
- <?
-
- Cookie::get('test');
-
-
- Cookie::set('test','123456');
-
-
对于这些封装,可以方便使用,同样需要注意的是,在Cookie操作时,请不要输出header,否则可能会出现header already send的warning,同时无法写cookie,这点请需要注意。
另外一个需要注意的是,cookie在不同的浏览器下面有着不同的限制,最常见的就是cookie的长度,请尽量不要超过4K的字节。
参考资料:
FF浏览器
- * 一个 Cookie 档案最多只能包含 300 个 Cookies。(这只适用于 Netscape,因为它把所有的 Cookie 都放在一个档案。)
- * 每一个 Cookie 的大小不得超过 4KB。
- * 每一个 URL 路径,最多只能设定 20 个 Cookie。
Tags: thinkphp, cookie, class
PHP Framework | 评论:0
| 阅读:27866
Submitted by gouki on 2008, July 30, 10:48 PM
身为一个网站管理人员,防盗链这个任务实在是任重而道远呀。不说别的,如果不控制,每天的流量可能就会刷刷刷的往上涨,可实际情况呢?根本没有人来浏览。这还不是最重要的,最重要的是这些流量占用了大量带宽,影响了其他人的正常浏览。长此以往,来浏览的人就更少了,再最后就造成恶性循环,网速越慢,来看的人越少,来看的人越少,被下载的机会就越多,也就导致打开网页更慢。
作为一个非下载性网站,防盗连实在是有一些必要,这里我也不谈很多,毕竟防盗链也是一门很高深的技术,我只能随便谈谈。
技巧没有多少,稍谈一点
1、利用SESSION机制,判断该用户的session存在多久?如果是刚生成的,则不让下载
2、COOKIE机制,如果是正常浏览网页,那么生成一个COOKIE,然后才允许下载
3、检查客户机的agent,不过这个很不准确,大多数下载工具都会伪造一个头
4、referer,这个嘛。。。黑黑,表面上有用,其实也没啥用,很明显,下载工具也一样会伪造
5、即时readfile下载,这个会有一点问题,如果东西不大,那是无所谓,如果东西很大,那问题就来了,不能断点续传,也不能使用下载工具。一旦下载失败就不得不重来
6、输入密码。。。象某些网站的提取码之类的
7、用组件,IIS上有现成的防盗链组件,直接可以使用,限制好特定的文件后缀名就行了
8、验证码,这个和输入密码下载有点类似,不过现在很多程序都会自动识别验证码,但下载工具好象还没有这个功能,可以尝试
9、通过邮件机制发送,而不是直接给出下载链接(但很有可能没有办法在网上显示相关内容)
10、无耻的生成BT种子,你们想怎么玩就怎么玩吧。
11、定期按规则更改文件名,或者是链接。。。但不知道那些下载工具是否会自动判断文件的MD5?或者在下载前先判断文件MD5?应该不可能,所以还是值得尝试一下,写个函数,对于下载链接的URL可以定时更换。
12、更改资源内容(这个是看别人的网站而来,意思是,如果提供了MP3下载,那么可以尝试定期不定期的修改MP3的TAG,如果是压缩文件,那么他们都有一个备注区,定期通过程序修改这些位置,可以造成文件大小不一样,对于下载软件来说可能就会被当成不同的文件)
对于11、12好象都有一个问题,主要是指迅雷,如果资源被收录了,但实际被删除了,可能会在一段时间内会被迅雷狂访问,变相的DDOS,曾经我有一台服务器就遇到过这种情况,在我之前,服务器的IP是做电影下载的,后来不搞了,我使用了这个IP,天天流量满,后来一查,发现所有的链接都是下载电影的,虽然没有资源了,但就是拼命的、不停的在连接,造成流量狂涨。
上面这些方法除了用组件比较完全和相对会比较成功一点之外,其他的都难说啊。。。
随便谈谈而己,也不奢求一定能够有用
Tags: 防盗连
PHP | 评论:0
| 阅读:21961
Submitted by gouki on 2008, July 30, 8:42 PM
刚才打开google reader的时候,突然看到一篇文章,让俺大吃一惊呀。详细内容如下:
原文网址:http://www.cnblogs.com/xinerzhui/archive/2008/07/30/1256648.html
- 请谨慎注意这一微软SQLBug
- 刚来博客园,有什么不对,需要改进的地方,欢迎各位同道指出来,谢谢。
- 今天在使用数据库时出现意外操作,将一张表的数据删除了。仔细查看SQL语句,发现问题。将问题类推到Northwind中。我们使用两个表,Employees和Products
- SQL语句如下:
- select * from Products where CategoryID in (select CategoryID from Employees)
- 不看表结构是看不出什么问题的,不清楚的看一下表结构。执行上面的SQL语句,你将能看到所有的产品记录。
- 当你执行上面语句的"select CategoryID from Employees",将会提示一个错误提示:
- 消息 207,级别 16,状态 3,第 1 行
- 列名 'CategoryID' 无效。
- 表Employees中根本就没有CategoryID列,而微软忽略了括号中的错误,执行前面的语句。如果是应用在删除,更新,那后果将是不可现象的。我曾为此付出了代价。
- 这个应该就是微软SQL的BUG吧,我们需要特别注意。
- 在SQL2000企业管理器,SQL2000的查询分析器,SQL2005的Management Studio Express中均有此Bug。
然后有人回复为:
#2楼 2008-07-30 17:21 | 熊呜呜
我在Sql2000上测试,确实有这个问题。
#3楼 2008-07-30 17:27 | ocean
- 有意思的问题,在我的management studio里面查询,也会有这个问题,要好好地研究一下。
#7楼 117.22.68.*2008-07-30 17:45 | johnnyshieh [未注册用户]
- Microsoft SQL Server Management Studio 9.00.1399.00
- 有楼主说的问题!
- 确实应该注意一下。
#9楼 2008-07-30 17:55 | 金色海洋(jyk)
- 看了表结构才知道,Employees 表里面没有 CategoryID字段。为什么不报错呢。错误被吃掉了。
-
- select * from Products where CategoryID in (select CategoryID from Employees)
-
- select * from Products where CategoryID in (select EmployeeID from Employees)
-
- 我比较了一下这两个语句的执行计划,不完全一样。建议lz分析一下执行计划。
- 因为我还不能完全看懂执行计划。只能看出来两个执行计划是不一样的。呵呵。
在MYSQL里没有试会不会遇到这种情况,我用navicat试是没有这种情况的。不知道其他的会不会有。
联想起以前写CRUD之类的东西时候,在过滤条件时,自动将空值直接unset掉,然后再拼成SQL,后来被BOBBY严厉批评了一下,确实,查询的时候感觉不出有什么问题,可如果是在UPDATE或者是DELETE的时候呢?本来是有条件的,可突然被unset掉成为没有条件了,那岂不是很恐怖?
借这个机会再次提醒自己,细心、周全、小心
Tags: mssql, sqlserver, microsoft, sql, bug
DataBase | 评论:0
| 阅读:21411
Submitted by gouki on 2008, July 30, 4:38 PM
<script type="text/javascript" charset="utf-8" src="http://www.neatcn.com/js.php?view=article&cids=1&titlenum=10&titlelimit=50&newwindow=1&cname=0&author=0&orderby=dateline&dateline=0&articleinfo=0"></script>
一一分析路径。。。
view=article&cids=1&titlenum=10&titlelimit=50&newwindow=1&cname=0&author=0&orderby=dateline&dateline=0&articleinfo=0
以上代码表示:
view = article 调用文章
cids=1 分类ID为1,如果没有cids,则代表调用所有分类
titlenum=10 显示为10条
titlelimit=50 标题截取字数为50
newwindow=1 表示是否开新窗:1为开新窗0为不开
cname=0 表示显示文章所在分类:1为显示,0为不显示
author=0 是否显示作者姓名,1为显示,0为不显示
orderby=dateline 表示文章按什么类型排序>> dateline:文章发表的时间 ,views:浏览次数最多的文章,comments:评论次数最多的文章
dateline=0 是否显示文章发表时间:1为显示,0为不显示
articleinfo=0 是否显示文章数据包括浏览次数和评论次数,1为显示,0为不显示
黑黑,尝试一下吧。,。。
Tags: js, 调用, 文章, 分类
Software | 评论:0
| 阅读:20418