Archive for July, 2005

高版本Linux上快速(15分钟)安装oracle 817

Tuesday, July 19th, 2005

本文试验环境:IBM thinkPad r50 fedora core 3
HP 6000主机,redhat linux 7.2.,rehat linux 9
您遇到过高版本linux上安装oracle817的麻烦吗?您是否对网上找到的长达20页的安装文档感到心寒呢?别急,看了本文保证你在半个小时内搞定高版本linux上的安装,那么我们开始吧。。。
本文受前段时间在windows上安装oracle的启发,前段时间换了个本子,要装oracle一时找不到安装程序(oracle公司已经不支持817了),于在到同事的机子上copy了一个安装好的,设置一下环境变量(注册表)就可以使用了(需要重建库了)。Linux上安装时突然受到启发,也成功了。。记下相关步骤,希望对大家有所帮助。
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com hjleochen@hotmail.com

最近在机子上装了一个fedora core 3由于工作需要要装个oracle,因为机子只有512M的内存,怕oracle 9跑不动(或不够快),再加上对9i不熟悉,只会oracle 8i。所以决定安装oracle 8i,在*nix上安装oracle一直是很头痛的事情。在网上找找相关资料,只找到在redhat linux9上安装8i的相关文档,内容有20页之多(目测的),而且非常复杂,还要降级gcc之类的操作。第一天试了一下,搞了半天没成功(连安装界面都出不来,真是郁闷),放弃了。
第二天起来想了想,其实那些降级gcc的操作,只不过为了在系统上重新链接那些可执行程序,为何不将已经在redhat 系列linux上链接好的程序直接拿来用呢?(别的厂商的linux没试过,不过linux在相同硬件平台下可执行程序的格式应该是一样的,可能我们对于windows下的程序从98拷到2K直接用感到很正常,为什么linux不行呢?呵呵,可能linux一开始就给大家一个艰深的印象吧。至少我是一时没转过弯来。)于是将公司在redhat linux 7.2上安装好的oracle程序目录($ORACLE_BASE/product目录)及.bash_profile文件tar下来。在fedora 上建立dba组及oracle用户,把tar文件里的.bash_profile覆盖oracle用户的.bash_profile(就是设置环境变量啦)。再根据系统的实际情况改一下相关的变量,设置ORACLE_SID=test及ORACLE_BASE=/home/oracle/变量。再将tar下来的oracle的product目录释放到$ORACLE_BASE目录下.再看一下$ORACLE_BASE/product/8.1.7/jre链接到哪,重建这个链接到你的jre目录或是直接在它指向的目录放上你的jre或是直接在$ORACLE_BASE/product/8.1.7/下放一个JRE.oracle就安装完成了(欢呼吧!)。就可以运行dbassist开始建库了。呵呵简单吧。。。
总的来说也就是:
1. 获取在某个版本linux上安装好的product目录及相关的环境变量
tar cf product product.tar&&gzip product.tar
及取得:~/.bash_profile
2. 在目标机器建立用户组及用户。
groupadd dba
useradd –g dba oracle
3. 设置用户的环境变量。
改~/.bash_profile中相关内容,示例见本文结尾。
4. 释放product目录到$ORACLE_BASE下。
5. 确认$ORACLE_BASE/ product/8.1.7/JRE链接指向正确的jre目录。
在我安装的实际情况中指向的目录是/home/oracle/jre,我又从服务器上把这个目录给tar下来了 …_…。
6. oracle安装完成,运行$ORACLE_HOME/bin/dbassist开始建库。
安装注意事项:
1. 如果你的linux分区足够大的话就不要将product目录放在fat分区上了,由于fat上不能建立链接(还是我mount选项不正确),导致释放tar文件后很多链接不存在,为这个问题我搞了半天。
2. .bash_profile中要加export LD_ASSUME_KERNEL=2.2.5这个具体什么原因我也不知道了,我也是在原来的系统找到这一条的。如果不加这个运行srvmgrl时出现会有一个错误,运行dbassist时java也出现一个错误,我猜(只是猜的,因为 错误提示某个库不正确)跟库的版本有关系(或是什么?请高手指点).
建库注意事项:
1. 如果在fedora下已经设置为中文环境,那么执行dbassist应该是乱码,可以先把/ect/sysconf/i18n中的LC_TYPE(?)这一行注释掉,即可正常显示,装完后再改回来吧。(改完后要重新登陆)
2. 要用root用户在/etc/上touch 一个oratab文件,然后chown和chgrp为oracle用户及其所在的组,如果没执行这个步骤的话安装用户(oracle)由于没有写/etc的权限dbassist时将失败(呵呵,这可是花了我2块1毛钱得来的(安装失败一次,安装期间抽了三根烟,共2.1元,呵呵。)
3. 好像没有第3点需要注意的了 hehe. ^_^。
这就是在fedora上安装oracle 8i的全部过程简单吧。(花了我4.2元—-6根烟时间,hehe)
后来在另一台redhat linux 7.2及linux9上测试通过。
附上我的.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific […]

<选择>–给那些正在或将要找工作的人们!

Tuesday, July 19th, 2005

这是我整整两年前,在找工作告一段落后写的一段文字,翻出来看看也别有感触,不知道下一次找工作时会是怎么样。不过我想现在的我和两年前的我多少有些不一样了,无论是思想上还是技术上。朋友们你们过得还好吗?
—————-
选择
找工作这些日子真是很累,也很久没写东西了,这里整理一个希望对那些正在找工作或将要找工作的同学,朋友们有所帮助。 Hjleochen. 2003-07-16
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com

其实自我17岁离家到福州,经历过许多,得到很多,失去过很多,在武汉工作了一年多的种种经历,我一直以为我长大了,什么事情都可以处理得很好了,但是这些天来我才发现其实我还是那么的幼稚,还是没办法处理好这些事情。
一个月前我从三明回到了福州,在这一个月里面我只工作了10天我面试了无数家的公司,自己找的,来找我的,朋友推荐的,说了无数次我原来的工作,对计算机业界发展的看法,离开前一家公司的原因其实每次我都说得好累、好累,每次都想说别问了行不行,但是每次我都忍住了,都很耐心的跟他们说,这就是成长。
保险在中国是一个正在迅速发展的行业,一个崇尚个人主义的行业,虽然人们态度严肃了点但是大家都很有活力,很有信心,如果不是因为初期经济的问题我想我就会真的成为其中一员,这那里我学到观点与大家分享:
***************************************
我在保险公司时一位经理说的(起初是机械行业的高级工程师,公司副总)我当时转行的原因是我看那些比我年长5岁10岁的人现在是什么样子,我估计我像他们那样努力,到时候我也大概是他们那个样子。所以我选择一个有更大发展空间的行业。
***************************************
其中有一段时间面试了很多公司后,什么回声音都没有,一个大男人一天到晚没事做,心情真是坏到极点了,这也许是我所经历过对我打击最大的日子,天都黑了。过了几天我终于决定到*得网络(_也许叶*将成为其中一员了)工作了,做j2ee其实那边提供的条件是很不错,只是没项目我不喜欢,开始可能大家对我都不大了解,所以似乎没什么,但是一个星期后,我拿着做的成果给他们看时,从他们的态度中我又找回了一点自信,其实我还是不错的。^_^
没有选择的时候很痛苦,有太多选择的时候也是很痛苦的,终于前面面试的家公司都通知说过了,其中有我以前很向拄的富士通,我真是很开心,其中我又去了一家以前没听说过的公司华迪(我现在的公司,当天下午就被录取了,据说他们到新**(我的上一家公司)调查过我还有很多认识的朋友都曾在这家公司做过),我又迷茫了,选择哪家呢,我几乎问了所有我认识的人,都没有结果,我失眠了,又想起了保险公司那位经理的话,想想我身边那些在大公司的人,现在是什么样呢?也许我以后就是那个样子,女友及她的很多朋友在宏*,已经好些年了,但是他们现在是什么呢,程序员。也许我不久以后也是那个样子,新*网以前的一个领导对我说,如果希望只是做程序员那么到大公司吧,如果希望在管理上有点发展就到机会更多的公司,要不回新**来吧,这边机会很多。最后我离开了*得,打电话告诉富说不去了选择了这家我认为不是很大,机会也不少的公司。
***************************************
在我看来一个人离职逃槽无非为了两个目的:一个是钱,另一个是得到一个更大的发展空间,在这个年龄,只要生活还过得下去,我选择后者(这也是我为什么能在新**一年半和现在选择华*的原因)
我认为:
求职信唯一的目的是为你取得面试的机会,
而面试的唯一目的是让你取得试用的机会,至于试用的过程就看你怎么发挥了。
我面试中犯了几大错误也与大家说说:
工资问题:
我到电信科学研究院面试了,各方面都说得很好,我觉得我进去是没什么问题了,但是最大的错误就是把工资要求说得太高了(^_^)最后还是与电信正式员工无缘啊。
到泰*工资又说的太少了,本来无意进去的最后却进去了,真是后悔啊。
后面最大的错误是找到工作后,出的工资跟找到的工作的工资差不多,换不换都没什么意思。
什么意思呢,到你最希望的公司面试最好工资由他们说,这样你才会有机会。
想快点找到工作呢就说少一点,等你做得不错的时候叫他给你加。
找到工作后,或有工作的人找工作的时候工资多说点,反正你现在有工作,生活没压力了不成功就算了嘛,是不是。
***************************************
其实这些天来都很迷茫,我也不知道我自己的选择是对的还是错的。我希望是对的,但是很多事情不是有希望就可以成真的。也许选择放弃保险是一种错误,也许选择不去富士通而选择华迪是一种错误,但是一切都已经成真了,我能改变的只是以后的日子,为时一个多月的求职工作已经结束,也许留给我的不只是回忆更是一种成长。
希望所有的朋友们健康快乐!

数据库很慢?程序很快.

Tuesday, July 19th, 2005

因为我出学校后做的第一个系统基本就是个mis系统,所有功能几乎全部依赖于数据库,所以即使后来我做了近两年的C程序员,也一直觉得数据库挺快的(指大量update或其它使用sql的操作),虽然我也知道用C写出来处理数据库数据再入库可能比sql来得快但具体快多少,并没一个很好的认识。
但今天遇到的事情却让我真正感觉到其它数据库再强大也有其局限性,如果程序实现得好的话数据处理性能能在数据库的100倍之上。
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明:http://www.upulife.com

先说一下运行环境:
IBM p690
系统:aix 5L
数据库:ora 8i
内存:8G Cpu多少个不大清楚。
存储大概1T左右。
处理一张600多万记录的话单表,要求根据号码字段的前几位去另一个9万记录的区号表取得区号并更新进去。。
起初写了个sql语句:
update ticket a set
ESN=(select distinct AREA_CODE from area_code b where b.head=substr(a.msisdn,1,7));(其实我对这条语句很没信心,一时间忘记update还有什么别的写法,有可能是我这语句写错了,如果真是这样那么本文就没意义了。请高手指点)
运行了2个多少时没结果,看一下oracle管理器中的session说估计还要300多小时,赫赫,不会吧。。。我很急啊(用户要数据,我明天要回家过春节)。。。又试着加了一个条件只处理10000条数据结果说要2小时。。
没办法,动手写程序吧。
写了个pro*c有以下处理过程:
加载区号表到二叉树中
取话单表中的数据,到区号表取得区号,更新回数据库(每1万条提交一次。)
结果多少时间????
5分钟….
加上我写程序15分钟,总共20分钟,哈哈,明天可以回家啦。。。天啦。。。早知道。。
没什么早知道。。。呵呵
其实从理论来说还是程序比较快。因为你把别一表放到内存,显然访问比较快。再加上程序步骤简单(oracle执行时会加上很多东西,不信你看看sql的执行计划。)所以速度快很多也就是可以理解的。
怪不得我很多的系统数据库都只是用来保存数据,用以查询。其它处理,如重单处理、统计之类的功能都在内存中完成而绝对不会用数据库.
总得来说 这是个权衡设计的问题? 一般来说数据库作些集合的运算,这是它的强项程序作逻辑处理功能,每种技术都有其适用的地方。在合适的地方使用合适的技术。

WebWork基于正则表达式(regex)的输入验证

Tuesday, July 19th, 2005

本文内容
1.开发动机。
2.开发过程及示例程序代码
3.遇到的问题及思考。
4.引用内容
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明:http://www.upulife.com
一:动机
前天学习了webwork的服务器端validation,不过xwork提供的几个验证类不能很符合开发的需要,特别是对于输入输出特殊字符的过滤功能,比如说用户名密码只能由字母和数字组成,而如果针对每种类型写一个验证类,那会很辛苦,不是吗?如果有一个通用的验证类该有多好啊。别急,有办法,文本处理和匹配正是正则表达式的长处,上午查了一下xwork文档中关于validation的描述和示例没找到相关的内容,所以决定自己写一个类,来实现正则表达式检验功能。经过实现和测试基本符合要求,不过使用了jdk1.4的regex库,低版本jdk不能使用。不知别人有什么其它办法?
由于刚转做java没几天对junit不是很熟悉,不知道像本文中写到的validation类如何进行单元测试,请高手指点。

二:开发过程及示例程序代码
先想一下我需要了解什么
1.由于对java不是很熟悉,首先要知道java中如何使用正则表达式。
2.如何实现一个validator类,可以在xwork中使用?
对于第二个问题很容易解决,因为我们有xwork的源代码嘛(赫赫,开源真是好啊。)
找到xwork源代码中StringLengthFieldValidator.java看一下人家是怎么实现的,xwork中实现 验证倒是不难,继承com.opensymphony.xwork.validator.validators.FieldValidatorSupport类就可以了,期间我又找到它们的父类以及实现的接口看了看,,也没细看(以后有时间慢慢看。)就开始考虑下一个问题了。。
如何在java中使用regex呢?不是很清楚,以前jdk中没这方面的库,据说oralily还是worx有一个实现,于上google搜索了一下,找到一个jdk的api,没想到jdk1.4已经开始支持regex了(看来regex魅力真是大呀,到处都有实现,unix下的工具我最喜欢的就属grep了。),怎么用呢?又找到csdn上的一篇文章< >http://dev.csdn.net/article/60/60832.shtm,呵呵,挺简单的(反正我也只用简单功能)
用是开始动手写validator类了:

/*
* Created on 2005-2-4
* hjleochen@hotmail.com
* GPL
*/
package com.xxxxxx.validator;

import java.util.regex.*;

import com.opensymphony.xwork.validator.validators.FieldValidatorSupport;
import com.opensymphony.xwork.validator.ValidationException;

/**
* @author leo
*
*使用正则表达式来检验输入字段是否符合条件,如果找到匹配则检验通过,不匹配则检验失败
*在xwork的validators体系中使用。
*使用了java的regex包,需要在jdk1.4及以上版本才能运行。
*
*/
public class StringRegexValidator extends FieldValidatorSupport {

private String regex=”";
private boolean doTrim = true;

public void validate( Object object )throws ValidationException{

String fieldName = getFieldName();
[…]

WebWork服务器端Validation的实现.(补充)

Tuesday, July 19th, 2005

文中说到的登陆程序的验证其实是很不严密的,还存在很多问题,比如:SQL注入问题没有处理,也就是输入中的特殊符号没有过滤等,所以只是一个示例实际应用中不可直接使用.
本来在那天写的时候想到了上面的问题,但是后来忘记写了。
现在正在找client side validation 和有没有regex功能的validation,如果没有就决定自己写一个了。.

WebWork服务器端Validation的实现.

Saturday, July 16th, 2005

系统测试。

写在工作三年的日子(一)

Saturday, July 16th, 2005

三年前的今天我准备离开校园,走向向往已久的社会,三年后的现在我正准备着离开asiainfo走向另一个新的起点,转眼间三年一晃而过,转眼间已经陪伴计算机走过了七个年头,总想努力抓住点记忆,一觉醒来却发现连自己都已经丢失在梦中,于是提笔记录下这些年的星星点点,为了给下一个三年提供点参考,也为了即将忘却的记忆…….昨天已经逝去,精彩或是并不精彩的故事(生活)仍将继续。(呵呵,回头看看这段感觉有点太伤感了。)
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com

突然间想起了学生时候常说现在已经不说的:“没有失败,只有放弃!”
回头看看,有很多关于农村和城里小孩子的比较了,FT,快成“中国农村孩子调查”了,赫赫。不过都是由感而发,抱歉。
一.小学时候的“白板”键
我80年代初出生于福建一个小山村,比起城市的孩子我们不知道的东西很多很多,没见过小提琴,没摸过钢琴,没有夏令营的暑假,没….,我们有的就是下地干活,上山砍柴(虽然现在跟身边的朋友们说他们都不相信,但是这决不是小说,也不是万恶的旧社会中发生的事情,而是每时每刻都发生在10亿甚至更多的被城里人遗忘的农民身上的事情,而时刻想着nike球鞋的城里的孩子们,永远也无法想象颗粒无收的无耐和农民工们跳楼讨工钱的悲哀),而正是这些让我们更早的知道了生活的艰辛和自立的重要,我一直很感谢我的父母及长辈们淳朴、忠厚、正直的性格对我的影响,至今我仍努力着让自己做个好人(至少我这么认为)。
所以我没能很幸运的从小跟计算机做伴,直到小学三年级我第一次见到了电脑学习机,算来那年应该是92年吧,那时候到一个父亲是村干部的同学家里玩,他们在用学习机玩玛丽,看到那个大大空白键,我说了一句:“这个叫白板吧”[麻将牌中的白板,其实那时候我并不懂麻将],那个同学说:这叫空格键“不懂就不要乱讲”,正是这句“不懂就不要乱讲”激发了我好强的心理,心想总有一天我会搞得很清楚了,也正是由于年少时的这句话对我的刺激,使我在多年后再听到有人对我这么说的时候,我才会疯狂的学习计算机的知识,不过这些是后话了,现在想想还真是要感谢这两位对我说“不懂就不要乱讲/叫”的人。
二.80年代的basic教程和自己画的“键盘”
大概是初中二年级的时候,我已经不记得什么原因,我翻出了比我大14岁的哥哥以前的课本,记得其中有两本计算机相关的书籍,一本是basic教程,另一本我已经不记得是什么了,反正画着计算机的图型,及ENIAC的介绍,那时就对这些产生的极大的兴趣,于是就开始慢慢的啃那本basic,那时已经是96或97年了吧,但是买计算机或是学习机是想都不敢想的事情,于是只能在纸上试着写下行号及一行行我并不是很理解的代码,后来我想总有一天我会用到学习机吧,不会打字可不行,于是找了个硬纸片,照着书上的图片,画下了26个字母的分布,还每天拿出来练习打字,呵呵,可能是由于那时这种做法对我刺激太大,或者是我手指太粗了,直到今天我的打字速度仍牛慢牛慢的。呵呵,看来打字高手我是成不了了。
三.初中毕业时终见多年的梦中情人
转眼间已经到了98年,终于在一个夏日遇见了我多年的梦中情人?pc机,其实中学期间我学习还算不错,虽然天天上课睡觉,学习也不认真,但是我的成绩总是班级前7名之内,学校10个班500多人中前50至少前100名之内,但是由于竞争的激烈性,农村的孩子要上好的中学比城里的孩子难多了,7000个人竞争200个名额进重点中学,虽然我考得已经很不错了,折算成100分制,除了数学80多以外其它全部是90分以上,但是我仍没机会上重点中学,于是我上了中专,(虽然后来我是很看轻文凭的,但是现在想想没能上大学多少是一种遗憾,不过上大学的话,今天就不是在纪念我工作三周年了,而是在努力寻找工作吧),而我上中专时要600多分,城里的孩子呢?400多分就可以了,从小大人们就不停的说,你们要努力学习啊,努力学习才可能离开这山沟沟,不用一辈子对着这片贫瘠的土地,但是我们需要面对的不仅仅是课余时间的劳动,还有城里与农村的两百分的差别,其实当时的600多分只能进这个学校的分校,还是我家人刚好碰到学校的学生科长,请吃饭,还有什么什么的,最后他老人家大笔一挥,把我从分校给挥到了总校(这是我在后来拿档案为身份证时发现的,他在33的后一个3上划了个竖,变成1了,呵呵),而我后来见到那学生科科长就觉得恶心。这也是后话了。昨天在网上看到飞鹰的blog中说到:“我想在大学校园中现在估计是很少能够看到从落后地区农村来的孩子了,现在的学费已经断绝了他们上大学的路。所以同学觉得我说的事像电影也就不足为奇了。”我是很赞同的。
离题太远了,赫赫,继续我的亲密接触(千万别拿鸡蛋或西红柿砸我呀,这可都是粮食啊,可惜了^_^),在那个夏日,我离开了从小长大的山村,到了在城里工作的大哥家准备过几天转车到学校报到,看到了他年初时刚买的pc机(应该是p200,32M内存据说花了1万),于是强烈的好奇,想去玩玩,心想着终于要梦想成真了,(我记得我要玩的时候我妈在阳台上跟我说,别乱动,小心玩坏了)于是我打开开关,按下power(赫赫,最大的那个键嘛,这我也知道),mong…..一阵响声吓我一跳,不会出什么问题吧,赶紧把插坐的开关关了(后来我才知道这是光驱或是硬盘的响声)。又过了一会,还是按奈不住,狠下心再开了一次,终于我看见了美丽的蓝天白云,以及初识了我后来才知道的“伟大的Microsoft”。后来的几天里我从电脑报合订本里学会了一些基本的windows操作,以及在我大哥的带领下上了伟大的internet看到了漂亮的“福建热线”网站,也从此与计算机、网络结下了不解之缘,开始了我七年的计算机知识的学习旅程。
2004-12-7 凌晨2.23完成上述内容.

浅谈B/S系统安全

Saturday, July 16th, 2005

这是发表在原公司(已经在股东们个人利益斗争中轰然倒塌)内部BBS上的一篇贴子,随便贴上来,(为保护在用系统及其它有部分删节及修改),适合初学者!
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com
———————————————————–
浅谈B/S系统安全
随着这些年的发展B/S系统已经超出了个人主页,留言本之类的应用,各种公司的核心应用都逐渐构建在WEB上了,而WEB服务器端的程序安全也倍受瞩目,本文先通过几个实例引入一些常见的安全问题,然后讨论一下WEB应用代码编写的一些基本准则和建议。由于本人已很长时间不从事这方面的工作了,所讲的内容可能有些过时或不对的地方,各位看官就权当笑话。
如果不想看冗长无味的论述,就直接翻到:“一些编程原则”部分。

一. SQL注入(SQL Injection)
这是现在出现的最多也最易应用的一个问题,使用数据库的系统就有可能出现这种问题,成因是对用户的输入没有做必要的检测及过滤,导致用户执行非法SQL语句。常见的如登陆程序,使用1’or ‘1’=’1进行任意用户登陆,记得98年台湾李登X的网站就是因此被黑….呵呵,好些年了,不过问题依然。 对于这类问题的网上已经有无数的实例和教学,本来不想趟这混水,不过正是由于其普遍性(我见过至少5个厂商10个以上的电信行业中的各种web系统存在不同程度上的登陆问题)和埋在其深处的语义方面的内容,所以决定从2003年底某系统的代码分析记录谈起。
例一:
以下内容来自2003年底的代码分析记录,代码文件的最后修改日期为2003.12.XX
XX帐务–XX管理系统
等级:AAA 严重
情景:登陆
条件 已经某合法用户名(非必要条件),如:tt。
过程:登陆界面中输入
操作员:1’or ‘1’=’1
口令:随便
执行结果:登陆成功,拥有所有操作权限。
问题分析
login_check.jsp
line 15处开始:
此处没进行用户输入有效性处理………
user_code = request.getParameter(”user_code”).trim();
strSql = “select count(*) from UserInfo where user_code = ‘”+ user_code +”‘ and password = ‘” +password+ “‘ and status=1″;
以上查询为问题出处,当user_code为tt’ or […]

动网论坛入侵之插件篇

Saturday, July 16th, 2005

动网论坛入侵之插件篇
本文为非技术文章,属搞笑网文,以博君一笑!
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com
——————以下是一些废话,没兴趣的人直接看最后几段———–

关于动网论坛入侵的文章很多,由于对asp不感兴趣所以一直不曾尝试过做些什么,其实在各位的努力下动网的安全性已经提高了很多了,版本也已经发展到7.0.0 sp2了,入侵也不是那么简单了。下文通过动网一个比较常用的插件为入口….呵呵,我也有幸插一脚!
故事发生在公元前不久,公司内部论坛开了个什么宠物领养的功能,上至公司老总下到像我这样的草根层,都兴致勃勃,由于我不喜欢灌水,所以社区币很少,看着那些高等级的人,心里实是不爽,于是想找点另类的方法来提高等级,于是乎历史上多了这么段小插曲……
公司论坛装的是大名鼎鼎的DVBBS,上safechina.net搜了一把没发现在方面的内容,看来现在比以前是好很多了,不就是要社区币嘛嘛,从哪里来?一.发贴,二…..呵呵,银行啊!走抢银行去!!!论坛有个社区银行,说不定有突破呢!上dvbbs.net看了一下没有这功能,看来是第三方厂商的插件了(窃笑),看来希望大多了,惯性的找些有输入框的地方,先看到的是“事件”,原来是银行历史记录的查询,照例输入一个单引号’,呵呵,出错了:打印出:user=’’’ order by ID 没有过滤,输入1’ or user name like’%a% 结果正确。可惜是JET DB驱动,一般是ACCESS了,累,既然这么基本的输入过滤都没做,那么看来作者的安全意识不是很高了,反正我只要钱,不用这么累,找找有没能直接update的,抽烟ing….,呵呵,银行事务,存款,取款,转账,贷款每个测试一下,发现只有转账中的目标用户名能输入字符,其它都限制只能输入数字了,嘿嘿,这个功能肯定update用户的金钱,又是单引号’,又出错了,直觉告诉我能行了,于是转1块钱给 a’ or username=’b,提交….,错误信息,郁闷ing….,看看b用户,多了一块钱,a用户一分钱都没少(明白了吗?我的一块钱变成两块了,如果你多几个 or 就多更多了,其实它的语句就是update aa set money=money+xxx where username=’$username’),hahaha,五分钟后,我就拥有了500万!!呵呵,这可是我这辈子第一次抢银行啊(要不你还能活着在这废话),如果现实中我能有这么多钱该多好啊^_^
好了,我目的也达到了,要做别的什么的话也可能只是时间的问题,我没兴趣也没时间去做那些了,不过,我google了一下,发现用这个插件的BBS还真是不少,本来也想看看它源代码,但是找了半天没找到,所以我也不知道是谁开发的,也没法发什么BUG报告了,算了!希望没人做什么坏事吧!!
—————————————-本文我所想说的——————
其实上面的都是些无聊的废话,任何一个知道SQL注入的人都能轻易做到,我想说的就是所谓的“系统安全”,其实系统安全是一个浩大的工程,从硬件到系统再到应用,任何一个环节出了问题,都可能导致全盘皆输(这就是所谓的木桶理论),正如许多讲述网络安全的书籍所说的:“无论你内部网络安全措施做得如何好,可能都顶不过一个用户的拨号。”呵呵,经典!这个例子中,硬件做得很好,系统也做得很好了,而且动网也做得很不错了,可是插件没有做好,所以整个系统都没做好!这不仅仅是管理员的问题,更是开发者的问题,其实这里也“验证”了一条网络安全“原则”:最少服务原则。
有人说:开源需要勇气!
我觉得,开源需要勇气,更需要责任!做系统,开发者不是写完一个程序,做完一个功能就可以了。你还要负起作为开发者的责任,也许在你的license中已经写得很清楚了:本人不对由于使用本系统而引起的任何问题负责。但是这不是你所应该做的,不是一名合格的程序员所应该做的,既然你做了,你就对这一切负有责任,即使别人的系统被毁了对你没影响,那么你也应该觉得羞愧,也应该在午夜梦回时感到惊心,因为这是你的责任。
不仅仅开源系统,免费系统,你所做的任何事情都如此,不要说我不懂安全,不要说这不是我的特长,因为还有更多比你更不懂得安全的人,还有更多比你更不懂得计算机、不懂得网络的人们,在使用你所公布的东西。你不觉得你对这一切负有责任吗?文人中都有”文责自负”的说法,他们能对自己所写的那些虚无缥缈的东西担负起自己的责任,但是作为一个开发人员,一个程序员为什么对自己生产的看得见,摸得着的东西说与本人无关呢?这绝不是我们应该做的!醒醒吧!!做一个能把信送给加西亚的人(《致加西亚的一封信》)
回头看看,不知不觉没想到上文竟成了关于责任的说教了,其实作为一个有独立人格的人就应该做到这些,应该对自己的行为负责,这也是我最近感触深刻的东西,也许你做一个BBS并不会给使用者带来什么灾难性后果,换个角度想想,如果你做的是一个事关企业生存攸关的核心业务系统呢?比如电信计费、生产控制、更甚于导弹发射系统呢?不要告诉我你到时候会做得更好,我不相信,也没人会相信的!
从小事做起,从现在做起(别说我土),做个对自己,对自己的程序,自己的行为负责的人。
做一个能把信送给加西亚的人!!
Hjleochen
2004-6-10
_____________________________
后:这篇短文写了很久了,一直没想要贴出来,那段时间我写的代码出了很多问题,非常郁闷,由感而发,以警示自己。
@Copyright All Reserved By CFNET 2000-2004
hjleochen@safechina.net

你敏捷得起来吗?

Saturday, July 16th, 2005

这是6月初写的一个日志,发的时间没注意格式有点问题,今天看到
整理格式后重发一下….
版权声明:可以任意转载,转载时请务必标明文章原始出处、作者及本声明http://www.upulife.com

五一期间,因为书店打折,买了好多书,其中一本就是排行版上居高不下的《敏捷软件开发》,也许是我理解能力有限,
没能掌握其精髓,到现在也只是当小说一样翻着看了。但是有一点想法最近始终出现在我的脑海里,“我能敏捷得起来吗?”,
想来想去我是不行。
对于单无测试,测试驱动开发我认为是非常有意义的,效果比较明显的,也是比较容易做到(至少比其它方面)。
因为没有健全的测试保证,重构,迭代,集成都会遇到很多问题,但是测试只是基础,只是开发过程中的一个组成部分,
它并不能保证系统的成功。XP提倡尽量少的前置设计,而是在开发的过程中进行演进设计,从不断的演进中使系统的
架构逐渐的浮现,这非常的好,也很符合大家比较认同的系统累积的隐喻(codecomplete steve93),但是这种方法并不
是对任何人都有效的,对于面向对象,设计模式,基至于OOP还不是很清楚的人们来说,一味的跟风追求、使用所谓的XP,
敏捷这样的编程方法,最终形成的不可能是一个架构清析,结构优美,稳定,扩展性良好的系统。因为你没有OO思想,
模式理论,就不可能在代码的改进过程中改出结构良好的框架,体现良好的设计,最终你使用的将是code and fix,使你
的团队深陷焦油坑中。没有这些基础,即使使用再强大的开发语言,也只能写出有强大OO机制支持的面向过程的程序,使
用再先进,完善的开发过程,也不能带给你项目的成功。
我所要说的就是任何先进的技术和方法,没有一定基础和环境是没办法为你创造生产力的,不是你整天”拥抱变化”,
敏捷开发就真的能开发出客户满意的产品的。软件开发的最初和最终的目的是为你及你的客户创造价值。像我一样的初学
者们醒醒吧,不要整天被出版商和商家们的炒作牵着走,回去好好学学OO,写写代码,当你对于编程(或都说软件开发)
的理解达到一定程度、技能达到一定水平时不用别人的说教,凭借你自己的努力也可以在软件开发的大道上“敏捷”的行走。
“没有最好的过程,只有最适合的过程”(不知道谁说的),只有你自己知道什么是最适合于你自己,你的团队的软件开发过程。
“那些在任何情况下都美丽的事物,美丽是对其本性而言的,赞美不是其本性的一部份”(敏捷软件开发)