Submitted by gouki on 2008, November 14, 10:52 AM
demo地址:http://www.51toria.cn/demo/JQplus/jqzoom/
使用的JS:
页面调用方法:
JavaScript代码
- jQuery.noConflict();
- jQuery(document).ready(function(){
- $("img.jqzoom").jqueryzoom();
- });
Tags: jquery, plugins, jqzoom, javascript, demo
Javascript | 评论:3
| 阅读:28499
Submitted by gouki on 2008, November 13, 10:45 AM
原文地址:http://www.phpv.net/html/1639.html,作者:手气不错
未删节版本
开门见山,考虑下面的代码(原文连接有详细的解释)
PHP代码
- <html>
- <body>
- <?php
- if (isset($_REQUEST['submitted']) && $_REQUEST['submitted'] == '1') {
- echo "Form submitted!";
- }
- ?>
- <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
- <input type="hidden" name="submitted" value="1" />
- <input type="submit" value="Submit!" />
- </form>
- </body>
- </html>
看似准确无误的代码,但是暗藏着危险。让我们将其保存为 foo.php ,然后放到 PHP 环境中使用
foo.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo
访问,会发现弹出个 Javascript 的 alert -- 这很明显又是个 XSS 的注入漏洞。究其原因,发现是在
echo $_SERVER['PHP_SELF'];
这条语句上直接输出了未过滤的值。追根数源,我们看下 PHP 手册的描述
'PHP_SELF'
The filename of the currently executing script, relative to the document root.
For instance, $_SERVER['PHP_SELF'] in a script at the address
http://example.com/test.php/foo.bar would be /test.php/foo.bar. The __FILE__
constant contains the full path and filename of the current (i.e. included) file.
If PHP is running as a command-line processor this variable contains the script
name since PHP 4.3.0. Previously it was not available.
原因很明确了,原来是 $_SERVER['PHP_SELF'] 虽然“看起来”是服务器提供的环境变量,但这的确和 $_POST 与 $_GET 一样,是可以被用户更改的。
其它类似的变量有很多,比如 $_COOKIE 等(如果用户想“把玩”他们的 cookie,那我们也是没有办法)。解决方案很简单,使用 strip_tags、htmlentities 等此类函数过滤或者转义。
echo htmlentities($_SERVER['PHP_SELF']);
-- Split --
上述的例子让我们需要时刻保持谨慎 coding 的心态。Chris Shiflett 在他的 Blog 总结的相当直白,防止 XSS 的两个基本的安全思想就是
Filter input
Escape output
我将上面翻译成 “过滤输入,转义输出”。详细的内容,可以参考他 Blog 的这篇文章,此处略。
Tags: php, php_self
PHP | 评论:3
| 阅读:22946
Submitted by gouki on 2008, November 12, 11:30 PM
问题:主从服务器表类型的选择
一般的共识是主服务器使用innodb,从服务器使用myisam,以便各尽其能。
问题:主从服务器字段类型的选择
字段类型对于分页等操作有很大影响。主服务器一般是innodb,因为不涉及查询,所以可以使用varchar等来存储字符串来节省空间,从服务器一般是 myisam,因为涉及查询,所以必须在char和varchar之间仔细权衡,没有varchar, text, blob字段的表是静态表,反之是动态表,静态表的检索效率要比动态表好若干倍,一般来说,所有涉及大结果集的查询都应该尽可能保证在静态表上完成,这里 说一个例子:比如说常见的articles表有title(varchar), body(text)等字段,在做文章列表的时候,因为不是静态表,所以查询不会很快,下面开始重构解决方案:把原来的articles表拆分成 subjects表和contents表,title字段设置为一个足够的char类型放在subjects表里,body字段还保持是text类型放到 contents表里,subjects和contents表之间的关系是一对多,这样,顺带着也方便的实现了多页文章的功能,而且更重要的是在查询文章 列表的时候,操作都是在subjects静态表里完成,效率肯定会比前一种方案提升很多。
问题:主从服务器NOW()函数造成数据不一致
假设在主服务器上执行一条INSERT .... VALUES ( ..., NOW()),那么在从服务器上也会同样执行一条的SQL语句,但是一来主从服务器各自的时间设置可能就不一致,二来主从服务器间的SQL同步也可能存在 时间上的的延迟,这样,NOW()在两台服务器上的结果就可能不一致。解决方法是显而易见的,就是不要使用NOW(),时间的计算在应用程序里完成。这里 介绍一个额外的小技巧:在PHP里如果想获得当前时间的时间戳,不要用time(),而应该使用$_SERVER[‘REQUEST_TIME’] (PHP版本大于5.1有效),这样少做了一次系统调用,更有效率。
问题:主从服务器读写分离时读操作失败
先重现一下问题:比如说添加一条新数据,添加成功后根据last_insert_id跳转到新添加数据的浏览页面。在此过程中添加新数据的操作是在主服务 器上完成的,浏览新数据的操作实在从服务器上完成的,不过由于主从服务器间SQL同步存在延迟,所以当使用last_insert_id在从服务器上查询 的时候,从服务器很可能还没有还没来得及同步到此记录,所以读操作失败。解决思路也不复杂,在代码里加入一个缓存层(可以使用memcached),新添 加的数据都顺手放到缓存层里一份,新数据的读操作也先查询缓存层,这样就不会再有读操作失败的问题了,当然删除或者更新数据的时候也要顺带着处理好缓存数 据,可以使用观察者模式来搞定。不过这样缓存方案只限于读取单一的记录,对于读取列表的记录的情况,则是无效的。
问题:主从服务器索引是否有必要保持一致
一般都是利用主从服务器完成读写分离,从服务器上进行读操作,主服务器进行写操作,这样的话,主服务器上仅保留主键,外键,唯一索引等必要的索引即可,以 便保持数据合法性,而对于那些原本用于优化SELECT操作的索引,可以全部删除,如此的话主服务器的写操作效率会提升很多。
作者:老王
原文:http://hi.baidu.com/thinkinginlamp/blog/item/5d72dd5469b1885fd0090633.html
Tags: database, mysql, 主从数据库, myisam, innodb
DataBase | 评论:0
| 阅读:21187
Submitted by gouki on 2008, November 11, 1:34 AM
周六,小家伙病倒了,脸红红的。
因为平常也有时候会脸红,所以也没当一回事,第二天,才发现发烧了,听老婆说好象到40度了。在医院挂了水。
周一,结果发现烧退了,去医院检查了一下,发现白血球增多了。于是又挂了一瓶水先。
周二,去儿童医院检查一下。如果不行,可能准备住院了。
小家伙,希望你健康。
顺便提醒一下爸爸妈妈们,现在这个季节确实容易感冒,如果有人咳嗽啥的,尽量离远点。我们小家伙就是病毒性感冒。
尽量不要让别人走上来亲亲脸啥的。注意卫生啊。
再次希望小家伙身体健康
Tags: 肖佑阳, 生病, 病毒性感冒
Baby | 评论:6
| 阅读:25977
Submitted by gouki on 2008, November 10, 10:40 PM
对于国产软件,我还是一向抱着支持的态度的。对Maxthon支持过,购买过正版杀毒软件,使用着个人版的WPS、fOXMAIL等。
凡是力所能及的,我一般还是会选择支持一下。
这次我介绍的软件是CyberArticle,如果我没有记错的话,以前它还有个中文名叫网文快捕,很早就用它了,惭愧的是那时候用的好象是破解版的。(软件这东西,是越来越不值钱了,现在要想从软件上赚用户的钱,除了软件本身外,服务才是大头。)
5月的天空是黑白的,很多人都选择了将自己的一部分薪酬对四川同胞们进行了帮助。CyberArticle也不例外,对于原本25元的软件,降价为20元,同时承诺所有的钱全部捐给灾区。
然后,同事mpeg凭着一个善良、博爱的心购买了这款软件,同时又博爱的将注册码告诉了我,让我又体验了了一下正版软件的乐趣。(后来我将此软件又推荐了给某某糖同学,他也兴高采烈的告诉我,购买了正版软件,我为我感到“自豪”)
我说的当然不完全是介绍这款软件,只是本软件在5.1测试版后,正式开始支持mysql了,这才是让我很心动的地方。
作为一个搞PHP开发的WEB开发人员,我的电脑里没有access软件和sql server express等,但mysql是从3.x开始就一直睡在我的机器里了。
启动这个功能后,快捕同学在我的数据库里建立了n个表,然后我发现我所存储的数据全部是用bLOB字段进行存储的(本来还想自己导出来使用呢,现在看来,还是有点复杂度的。)
但至少还是方便了我,如果我以后(我是说如果)心情好的话,还可以把这个网文快捕的数据采用WEB方式提供在网上呀。
我第天摘呀摘,网站的内容也就会随之增加,多幸福的事情啊。(随便说说。还没有研究完CybleArticle的数据结构呢,而且,即使我建表的时候选择了utf8,它建出来的表,还是采用了latin1_swedish_ci,有点让人失望,呵呵。希望以后会有改进吧,同时希望数据结构能够再优化一点。能够把blob字段等单出提到外部去,而不是和一些其他相关信息存储在一条记录里。)
官方提示:
XML/HTML代码
- 需要注意的地方:
- 1:MySQL安装。安装MySQL的时候,尽量选择utf-8作为默认的编码。
-
- 2:MySQL端口。如果MySQL采用了默认端口,您不需要做任何配置。
- 否则,请找到CyberArticle安装目录下面的文件Plugins\Books\WizMySqlOleDB.ini,例如:
- C:\Program files\Wizissoft\CyberArticle\Plugins\Books\WizMySqlOleDB.ini
- 用记事本打开这个文件,将[Server]下面的port的值修改成MySQL端口,例如:
- [Server]
- port=4444
- 然后保存该文件。
-
- 3:修改MySQL设置。
- 找到MySQL安装目录,例如:D:\MySQL\my.ini
- 用记事本打开my.ini 找到[mysqld]这一行,添加下面的内容:
- #扩大缓冲区
- max_allowed_packet=16M
-
- 修改完设置之后,请重新启动MySQL服务。
-
- 完成设置之后,您就可以新建MySQL类型的书籍了。
Tags: cyberarticle, 收藏, 网文快捕, 国产软件, 支持
Misc | 评论:3
| 阅读:24056