博文

目前显示的是 五月, 2008的博文

IE6一个尚未修补的漏洞可导致任意ftp指令被执行

http://www.rapid7.com/advisories/R7-0032.jsp
攻击者可以在他的页面中放一个iframe,指向一个精心构造好的ftp url.浏览这个网页的人就会在不知不觉中执行包含在url中的ftp命令. (理论上来说url应该只是一个网址,不应该包含ftp指令).比如悄悄把本地的文件传到hacker的服务器上去.

2-1=0 ????

(gdb) n
46 argc -= optind;
(gdb) p argc
$7 = 2
(gdb) p optind
$8 = 1
(gdb) n
47 argv += optind;
(gdb) p argc
$9 = 0
运行环境: ubuntu 8.04
还有,getopt居然会返回1.不是-1

Spring Security中openid的局限性

Spring Security中openid模块缺乏注册新用户的功能。例如,当一个用户访问我的网站,而我发现他没有登录。于是我就把他转到某个openid provider的页面去(例如yahoo)。当它登录完成并跳转回来后,因为在我本地数据库的user表中并没有找到与该openid相对应的记录,于是认证还是失败了。一个想法是如果在本地的user表中没有找到。那么提供一个注册页面。让用户提交openid,以及其它的基本信息(但是不包括密码),然后把它加到数据库中去。但是这样应该是用户在使用openid登录成功后才能访问的。但是spring security的openid模块并没有给我提供一个这样的中间状态。论坛上有人给出了解决办法,就是在web.xml中加一个listener:<listener><listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class></listener>该类实现ApplicationListener接口,然后在onApplicationEvent中写:if (event instanceof AuthenticationSuccessEvent) { // Logon event UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) event.getSource(); WebAuthenticationDetails details = (WebAuthenticationDetails) token.getDetails(); String login = (String) token.getCredentials(); ///TODO addToDataBase(login, details.getRemoteAddress(), details.getSessionId()); } 另外,我是不是应该限制下,只允许使用我所知的几个比较大的provider呢?如果允许用户任意输入网址,那么它就能牵引我去访问任意一台服务器。我觉得这样很危险。

栽倒在openid里

今天下了spring security( aka Acegi )。准备用它的openid完成用户认证。事情大概是这样的,用户在登陆页输入openid的provider(例如yahoo.com),sxip的openid首先对这个url执行一个类型为head的http请求。yahoo会把yadis url返回回来。然后sxip再发一个GET请求获取yadis信息数据。这一步没有问题。找到了。但是接下来会把本机的j_spring_openid_security_check页面当作YadisURL使用headXrdsUrl再次请求。这一点让我很奇怪。然后就会得到这样的错误:ERROR [org.apache.commons.httpclient.HttpMethodDirector] - Narrowly avoided an infinite loop in execute然后sxip会说HTTP error during HEAD request on: http://localhost:8080/myapp/j_spring_openid_security_check ,原因是:Maximum redirects (0) exceeded奇怪~~~~然后发现是我的openid版本不配套。很奇怪。spring security的包中没有包含openid,所以这个是我自己下的。下载的是0.9.4。最终发现,替换成0.9.3就ok啦!但是现在已经夜里4点了。还要睡吗?

给wordpress改编码

今天费了好大的劲把blog的mysql数据库编码从latin1改成了utf-8。唉,在上家公司工作的时候经常干这事,每次都被折腾死了。改完之后,我用Spring-Struts-Hibernate新写的blog就可以正常的显示了。宣传一下:http://www.sunchangming.com:8077/blog/index.action1、数据的实际编码
打开网页,然后点右键选“Encoding”。然后就可以知道现在是用什么编码浏览的这个网页。那么,实际上,也将以这样的编码提交form。如果程序没有再做转码。那么数据库里面存储的就是这样的格式。2、数据库的编码
每次连接mysql的时候,连接属性中有一项时是字符集。实际上这个名称很不恰当。确切来说,是说这个mysql连接在使用什么编码处理字符串。
大部分应用程序,如果在连接数据库的时候没有特别指定编码,那么将会用mysql的默认编码。
例如,如果wordpress的config文件中如果没有指定编码,那么将采用当前mysql的默认编码。
这个编码是什么呢?可以这么看见:
#mysql --help |grep default-character-set如果直接用
#mysql -uroot -pxxxx
连接数据库,那么就是采用的这个编码。
这个可以在mysql的设置文件中设置。如果不设置,默认就是latin1。但是比较可恨的是mysqldump默认采用的是utf8。并且mysqladmin默认采用的也是utf8.
而我的Blog默认是utf-8的数据,且错被当作了latin1存在数据库中。然后再通过mysqldump或者phpmyadmin以utf8的方式导出来,那么就废掉了。倒了数次。最后一次才成功。流程如下:
1、用mysqldump把表结构导出
mysqldump -uxxx -pxxxxx dbname --add-drop-table --skip-add-locks --no-data --single-transaction --hex-blob --default-character-set=latin1 --result-file=E:\first.sql --skip-comments
2、用mysqldump把表的内容导出。但是不要表结构。
mysqldump -uxxx -pxxxxx dbname--no…

正在学struts

啊,刚从hibernate的噩梦中逃出来。又入ssh之二,Struts。 我正在着手把这个Blog用jsp重写。计划使用现有的数据库表。然后使用hibernate将表结构逆向导出成java beans。然后向上一步步的写呈现和逻辑。我发现Struts真的是很强大,但是……文档不像hibernate那么条理清晰。Struts的文档杂七杂八,东一块西一块的,让我不知如何下手。 看在文档的时候惊喜的看到了dojo的名字。但是比较闷的是struts 2.0以及即将发布的2.1所继承的dojo都是0.4.x。而dojo曾是一下子从0.4跳到了0.9,几乎将整个架构重写。刚才在网上看见上个月有人在着手做stucts的dojo 1.x plugin,不知道现在如何了。 还有个小问题,谁指点下我 我在jsp中写: <%@ taglib prefix="s" uri="/struts-tags" %> 然后eclipse提示出错说Cannot find the tag library de script or for /struts-tags 但是我已经把struts2-core-2.0.11.1.jar放到WEB-INF\lib里面了啊。 运行一切都正常。 who can tell me why?

javax.ejb.Stateless在哪?

今天用hibernate的eclipse插件做逆向工程生java代码。但是生出来的代码中,有一个奇怪的annotation,@Stateless。文件的开头有@import javax.ejb.Stateless. 但是我根本就没有ejb容器啊,只有一个ejb3-persistence.jar。
so....去哪里找它?什么是ejb? 啊……好乱

axis2 1.4发布了

今天发现axis2 1.4已经发布了.
主要的改动有:
1、新增JAXWS 和JSR 181 Annotations的支持
2、实验性的CORBA支持
3、修补了一些BUG
同时,axis2的发行包中的axiom也从1.2.5升级到了1.2.7。
但是让我比较郁闷的是,依然,我无法把java.util.map从server传递给客户端,但是List和Set都没有问题。