一、linux svn co到指定目录不带svn链接的Url后缀方法:
下面这样避免把codes也检出到目录中:
而直接这样会有codes目录在本地的:
二、删除所有.svn目录:
当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法。
一、在linux下
删除这些目录是很简单的,命令如下
find . -type d -name ".svn"|xargs rm -rf
或者
find . -type d -iname ".svn" -exec rm -rf {} \;
全部搞定。(http://tech.techweb.com.cn/redirect.php?fid=26&tid=205673&goto=nextnewset)
二、在windows下用以下法子:
1、在项目平级的目录,执行dos命令:
xcopy project_dir project_dir_1 /s /i
2、或者在项目根目录执行以下dos命令
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
其实第二种方法可以用来干很多事的,比如把代码中的.svn替换为任意其他文件名并在硬盘根目录下执行,就可以从硬盘上删除所有的这个文件啦。
3、加注册表
Jon Galloway提供了一段注册表代码,可以将”Delete SVN Folders”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。Works just great!
代码为:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]@=”Delete SVN Folders“
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]@=”cmd.exe /c \”TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \”%1\” %%f IN (.svn) DO RD /s /q \”%%f\” \”“
将这段代码保存为一个.reg文件,双击确认导入注册表即可。
下面这样避免把codes也检出到目录中:
而直接这样会有codes目录在本地的:
二、删除所有.svn目录:
当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法。
一、在linux下
删除这些目录是很简单的,命令如下
find . -type d -name ".svn"|xargs rm -rf
或者
find . -type d -iname ".svn" -exec rm -rf {} \;
全部搞定。(http://tech.techweb.com.cn/redirect.php?fid=26&tid=205673&goto=nextnewset)
二、在windows下用以下法子:
1、在项目平级的目录,执行dos命令:
xcopy project_dir project_dir_1 /s /i
2、或者在项目根目录执行以下dos命令
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn"
其实第二种方法可以用来干很多事的,比如把代码中的.svn替换为任意其他文件名并在硬盘根目录下执行,就可以从硬盘上删除所有的这个文件啦。
3、加注册表
Jon Galloway提供了一段注册表代码,可以将”Delete SVN Folders”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。Works just great!
代码为:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]@=”Delete SVN Folders“
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]@=”cmd.exe /c \”TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \”%1\” %%f IN (.svn) DO RD /s /q \”%%f\” \”“
将这段代码保存为一个.reg文件,双击确认导入注册表即可。
secureCRT的登录sudo脚本来源:
http://oracledba.spaces.live.com/blog/cns!57D0C396BA028F14!276.entry
secureCRT的登录sudo脚本
如果你和我一样每天要开很多secureCRT窗口并且需要sudo(或者其他的事情),并且sudo还设置了timeout,那么一定要阅读这篇文章
一开始没每开一个secureCRT窗口总是要重复下面的事情:
sudo su - oracle
Password:
在等待sudo su 的时候经常会timeout,后来到google,baidu上去找自动sudo 的脚本也没有找到,最后还是乖乖的翻secureCRT的help文档解决了这个问题。
在secureCRT安装目录下C:\Program Files\SecureCRT\scripts
打开example1.vbs
修改username 为sudo su - oracle
修改password 为你自己的password
然后在session options里面设置logon script为该文件
最后记得把windows里面的权限设定为尽量小阅读全文
http://oracledba.spaces.live.com/blog/cns!57D0C396BA028F14!276.entry
secureCRT的登录sudo脚本
如果你和我一样每天要开很多secureCRT窗口并且需要sudo(或者其他的事情),并且sudo还设置了timeout,那么一定要阅读这篇文章
一开始没每开一个secureCRT窗口总是要重复下面的事情:
sudo su - oracle
Password:
在等待sudo su 的时候经常会timeout,后来到google,baidu上去找自动sudo 的脚本也没有找到,最后还是乖乖的翻secureCRT的help文档解决了这个问题。
在secureCRT安装目录下C:\Program Files\SecureCRT\scripts
打开example1.vbs
#$language = "VBScript"
#$interface = "1.0"
Sub main
' turn on synchronous mode so we don't miss any data
crt.Screen.Synchronous = True
' Wait for a string that looks like "login: " or "Login: "
crt.Screen.WaitForString "ogin: "
' Send your username followed by a carriage return
crt.Screen.Send "username" & VbCr
' Wait for a tring that looks like "password: " or "Password: "
crt.Screen.WaitForString "assword:"
' Send your password followed by a carriage return
crt.Screen.Send "password" & VbCr
' turn off synchronous mode to restore normal input processing
crt.Screen.Synchronous = False
End Sub
#$interface = "1.0"
Sub main
' turn on synchronous mode so we don't miss any data
crt.Screen.Synchronous = True
' Wait for a string that looks like "login: " or "Login: "
crt.Screen.WaitForString "ogin: "
' Send your username followed by a carriage return
crt.Screen.Send "username" & VbCr
' Wait for a tring that looks like "password: " or "Password: "
crt.Screen.WaitForString "assword:"
' Send your password followed by a carriage return
crt.Screen.Send "password" & VbCr
' turn off synchronous mode to restore normal input processing
crt.Screen.Synchronous = False
End Sub
修改username 为sudo su - oracle
修改password 为你自己的password
然后在session options里面设置logon script为该文件
最后记得把windows里面的权限设定为尽量小阅读全文
平时多人调试程序的时候,特别是页面级别和接口调用级别的,往往不希望有一些输出,但是这个时候出现一个bug或者要调试一下返回值或者它有可能是一个数组,这个时候下面这个函数就可以派上用场了,呵呵:
版权所有,请勿转载,要转载请注明出处,呵呵!
<?php
/**
* 把数组和字符串写入文件函数
*
* @param array or int string $everything
* @param string $path
*/
function array2log($everything,$path = "/tmp/array2log.txt")
{
if(is_array($everything))
{
$everything = var_export ( $everything,True);
}
$return = file_put_contents($path,$everything,FILE_APPEND);
}
$array = array("dfdfdf","dfdfdfdf","dfdf");
array2log($array);
?>
/**
* 把数组和字符串写入文件函数
*
* @param array or int string $everything
* @param string $path
*/
function array2log($everything,$path = "/tmp/array2log.txt")
{
if(is_array($everything))
{
$everything = var_export ( $everything,True);
}
$return = file_put_contents($path,$everything,FILE_APPEND);
}
$array = array("dfdfdf","dfdfdfdf","dfdf");
array2log($array);
?>
[root@vm0000055 ~]# tail -f /tmp/array2log.txt
array (
0 => 'dfdfdf',
1 => 'dfdfdfdf',
2 => 'dfdf',
)
array (
0 => 'dfdfdf',
1 => 'dfdfdfdf',
2 => 'dfdf',
)
array (
0 => 'dfdfdf',
1 => 'dfdfdfdf',
2 => 'dfdf',
)
array (
0 => 'dfdfdf',
1 => 'dfdfdfdf',
2 => 'dfdf',
)
版权所有,请勿转载,要转载请注明出处,呵呵!
`source` char(255) NOT NULL,
`score` int(11) NOT NULL,
`score` int(11) NOT NULL,
Mysql设置NOT NULL 在pdo插入该字段source为空时候返回false,初看你就奇怪了,为何设置的时候为not null,但是在插入的时候会为null呢?
是这样的,当时开发时候的需求不很明显,但是最后在开发收尾的时候发现这个字段可有可无,而且我们提供的是接口调用,人家就会问了,你这个参数填写什么,而很有可能就说那个参数啊,可以为空啊,呵呵,这下好了,那个字段刚好可能会出现NULL,和NOT NULL冲突,于是插入数据库出现返回false,而我们又是接口调用,尽量做到给用户返回成功的代码,于是这个插入数据库错误的问题可能会隐藏,最后解决办法是将数据库source字段改为可以为null!
ALTER TABLE `a` CHANGE `a` `a` INT( 11 ) NOT NULL DEFAULT NULL
ALTER TABLE `a` CHANGE `a` `a` INT( 11 ) NULL DEFAULT NULL
阅读全文
ALTER TABLE `a` CHANGE `a` `a` INT( 11 ) NULL DEFAULT NULL
原来以为global和$GLOBALS除了写法不一样以为,其他都一样,可是在实际应用中发现,2者的区别还是很大的!
先看下面的例子:
执行结果为:
0
5
阅读全文
先看下面的例子:
<?php
// 例子1
function test_global() {
global $var1, $var2;
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 ."\n";
test_globals();
print $var3 ."\n";
?>
// 例子1
function test_global() {
global $var1, $var2;
$var2 =& $var1;
}
function test_globals() {
$GLOBALS['var3'] =& $GLOBALS['var1'];
}
$var1 = 5;
$var2 = $var3 = 0;
test_global();
print $var2 ."\n";
test_globals();
print $var3 ."\n";
?>
执行结果为:
0
5
阅读全文
EditPlus5.0注册码:
Vovan
3AG46-JJ48E-CEACC-8E6EW-ECUAW
亲测5.0 build 651 64bit可用。
亲测5.1 build 1826 64bit可用。
Editplus 选中一行: ctrl+r
Editplus 复制一行: ctrl+r选择行,然后ctrl+c复制。
复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行
Editplus 删除一行: Shift+Alt+Delete 直接删除当前行, 或:shift+Delete也成。
移动一行到上一行/下一行: alt+shift+向上键(向下键)
------------------------------------------------------------------------------------------------------------------------
ViewLineBreak Alt+Shift+L 显示或隐藏换行符
ViewLineNumber Ctrl+Shift+L 显示或隐藏当前文档的行号
SearchFind Alt+F3 查找指定文本 SearchFindNext F3 查找下一个匹配文本
SearchFindNextWord Ctrl+F3 向下查找当前单词或选定的文本 SearchFindPrevious Shift+F3 查找上一个匹配的文本
SearchFindPrevWord Ctrl+Shift+F3 向上查找当前单词或选定的文本
SearchFind Alt+F3 查找指定文本 SearchFindNext F3 查找下一个匹配文本
SearchFindNextWord Ctrl+F3 向下查找当前单词或选定的文本 SearchFindPrevious Shift+F3 查找上一个匹配的文本
SearchFindPrevWord Ctrl+Shift+F3 向上查找当前单词或选定的文本
SearchMarkerPrev Shift+F4 转到上一个标记位置 SearchMatchBrace Ctrl+] 搜索一对匹配的括号
SearchSelectBrace Ctrl+Shift+] 搜索一对匹配的括号并选择该文本
Editplus 标签切换:不同标签之间的切换可以通过鼠标,也可以用“Ctrl+Tab”键。
------------------------------------------------------------------------------------------------------------------------
如果是选取某一部分 用shift+Pageup shift+Pagedown 选取光标前面所有 和光标后面的所有
如果是逐行+选 shift+ 上下
Editplus 合并行: Ctrl+Shift+J
删除多或者一行:Alt+Shift+Delete 删除当前行
删除单词:Alt+Delete 删除当前单词
反转大小写:Ctrl+K 反转选定文本的大小写
选择行:Ctrl+R 选择当前行
选择单词:Ctrl+W 选择当前单词(这个两个经常用到)
小写:Ctrl+L 转换选定的文本为小写
大写:Ctrl+U 转换选定的文本为大写
----------------------------------------------------------------------
操作上对单词的操作快捷键:
移动到上一个单词 Ctrl+Left 移动到上一个单词
选区扩展到上一个单词 Ctrl+Shift+Left 将选定区域扩展到上一个单词
移动到下一个单词 Ctrl+Right 移动到下一个单词
选区扩展到下一个单词 Ctrl+Shift+Right 将选定区域扩展到下一个单词
删除到行结束 Ctrl+Shift+Delete 删除到当前行结束位置
删除到单词结束 Ctrl+Delete 删除到当前单词结束位置
删除行 Alt+Shift+Delete 删除当前行
删除单词 Alt+Delete 删除当前单词
创建字符副本 Ctrl+- 复制上一行的一个字符到当前行
创建当前行副本 Ctrl+J 创建当前行的副本
----------------------------------------------------------------------
Editplus/UltraEdit打开的文件标签间切换的键盘快捷键:
写代码时都用键盘,这是切换文件时要去用鼠标点,比较麻烦。
这个键盘快捷键网上介绍的不多哦。
Ctrl+Tab或Ctrl + F6或 Ctrl+Shift+F6
editplus编辑perl/php双击选中变量的解决办法:
http://www.jeftom.com/?p=375
阅读全文
Vovan
3AG46-JJ48E-CEACC-8E6EW-ECUAW
亲测5.0 build 651 64bit可用。
亲测5.1 build 1826 64bit可用。
Editplus 选中一行: ctrl+r
Editplus 复制一行: ctrl+r选择行,然后ctrl+c复制。
复制一行到下一行中:Editplus有:Ctrl+j 复制上一行的一个字符到当前行
Editplus 删除一行: Shift+Alt+Delete 直接删除当前行, 或:shift+Delete也成。
移动一行到上一行/下一行: alt+shift+向上键(向下键)
------------------------------------------------------------------------------------------------------------------------
ViewLineBreak Alt+Shift+L 显示或隐藏换行符
ViewLineNumber Ctrl+Shift+L 显示或隐藏当前文档的行号
SearchFind Alt+F3 查找指定文本 SearchFindNext F3 查找下一个匹配文本
SearchFindNextWord Ctrl+F3 向下查找当前单词或选定的文本 SearchFindPrevious Shift+F3 查找上一个匹配的文本
SearchFindPrevWord Ctrl+Shift+F3 向上查找当前单词或选定的文本
SearchFind Alt+F3 查找指定文本 SearchFindNext F3 查找下一个匹配文本
SearchFindNextWord Ctrl+F3 向下查找当前单词或选定的文本 SearchFindPrevious Shift+F3 查找上一个匹配的文本
SearchFindPrevWord Ctrl+Shift+F3 向上查找当前单词或选定的文本
SearchMarkerPrev Shift+F4 转到上一个标记位置 SearchMatchBrace Ctrl+] 搜索一对匹配的括号
SearchSelectBrace Ctrl+Shift+] 搜索一对匹配的括号并选择该文本
Editplus 标签切换:不同标签之间的切换可以通过鼠标,也可以用“Ctrl+Tab”键。
------------------------------------------------------------------------------------------------------------------------
如果是选取某一部分 用shift+Pageup shift+Pagedown 选取光标前面所有 和光标后面的所有
如果是逐行+选 shift+ 上下
Editplus 合并行: Ctrl+Shift+J
删除多或者一行:Alt+Shift+Delete 删除当前行
删除单词:Alt+Delete 删除当前单词
反转大小写:Ctrl+K 反转选定文本的大小写
选择行:Ctrl+R 选择当前行
选择单词:Ctrl+W 选择当前单词(这个两个经常用到)
小写:Ctrl+L 转换选定的文本为小写
大写:Ctrl+U 转换选定的文本为大写
----------------------------------------------------------------------
操作上对单词的操作快捷键:
移动到上一个单词 Ctrl+Left 移动到上一个单词
选区扩展到上一个单词 Ctrl+Shift+Left 将选定区域扩展到上一个单词
移动到下一个单词 Ctrl+Right 移动到下一个单词
选区扩展到下一个单词 Ctrl+Shift+Right 将选定区域扩展到下一个单词
删除到行结束 Ctrl+Shift+Delete 删除到当前行结束位置
删除到单词结束 Ctrl+Delete 删除到当前单词结束位置
删除行 Alt+Shift+Delete 删除当前行
删除单词 Alt+Delete 删除当前单词
创建字符副本 Ctrl+- 复制上一行的一个字符到当前行
创建当前行副本 Ctrl+J 创建当前行的副本
----------------------------------------------------------------------
Editplus/UltraEdit打开的文件标签间切换的键盘快捷键:
写代码时都用键盘,这是切换文件时要去用鼠标点,比较麻烦。
这个键盘快捷键网上介绍的不多哦。
Ctrl+Tab或Ctrl + F6或 Ctrl+Shift+F6
editplus编辑perl/php双击选中变量的解决办法:
http://www.jeftom.com/?p=375
阅读全文
长着金色龙鳞的龙不是会长在水池里的,一旦遇到风雨,就会一飞冲天,藐视昆仑就是形容此人非凡人!应该是“金鳞岂是池中物,一遇风云便化龙”吧!长着金色龙鳞的鱼怎么会一直呆在一个普通水池里呢,一旦有了风云,就会一飞冲天,化身为龙。是说此人非比寻常,虽然现在还和普通人没什么区别,那是因为他还没有遇到机会,一旦机会来临,他就会成为一代霸主,主宰苍生。 长着金色鳞片的水中之物,怎么可能只是一般的鱼虾而已,早迟有天会因为遇到适当的机会成为飞天巨龙。 这个话的意思其实就是:是金子迟早会发光的!金鳞是指有才能之辈,鳞鱼鳞,支水中动物,就是说,金鳞不是泛泛之辈,而第二句话就是表面意思,一遇到风云(指的是机遇)变化成龙,龙时传说中的圣兽,古往今来,都是天之骄子的代称,言下之意就是金子总会发光,怀才总会有遇,就是时机不同罢了
风云里的
第一句是说风云能帮助雄霸
第二句是说风云也能毁掉雄霸
风云 是 聂风和步惊云
金鳞本来就不是生活在水池中的,只要遇到风云就会变成龙,它的成功和失败都取决于风云.这是《风云》里面的一句话。这句话,是说雄霸的!!!
原始出处《说岳全传》,说的是岳飞手下的大将余化龙
风云里的
第一句是说风云能帮助雄霸
第二句是说风云也能毁掉雄霸
风云 是 聂风和步惊云
金鳞本来就不是生活在水池中的,只要遇到风云就会变成龙,它的成功和失败都取决于风云.这是《风云》里面的一句话。这句话,是说雄霸的!!!
原始出处《说岳全传》,说的是岳飞手下的大将余化龙
今天和老总参加了一个招聘会,回来帮公司筛选简历,感受颇多!我所在的是一家大型企业。从收到的简历数量可以看出来, 两个小时不到,收到1300份简历,要从中选出100份进行笔试。比例:13选1
要知道,现在有800多万大学生在找工作,每个职位的竞争者最少也要有好几十人,哪个人事主管会仔细看每个人的简历?可以告诉大家,每封简历在筛选人眼前停留的时间最多不超过15秒,我们一个比较过分的老总甚至5秒决定一份简历。不是说不重视,实在是看不过来。如果每封都看得那么仔细,我们都不用干活了。
我通过下午的筛选简历,觉得有必要跟在找工作的朋友们说说一些需要注意的地方。彻彻底底都是我今天的实际感受。阅读全文
要知道,现在有800多万大学生在找工作,每个职位的竞争者最少也要有好几十人,哪个人事主管会仔细看每个人的简历?可以告诉大家,每封简历在筛选人眼前停留的时间最多不超过15秒,我们一个比较过分的老总甚至5秒决定一份简历。不是说不重视,实在是看不过来。如果每封都看得那么仔细,我们都不用干活了。
我通过下午的筛选简历,觉得有必要跟在找工作的朋友们说说一些需要注意的地方。彻彻底底都是我今天的实际感受。阅读全文
http://chaoqun.17348.com/2009/04/efficient-pagination-using-mysql/
相信这是个大家都常见的问题,解决方式各自不一,欢迎交流,尤其是对分页有需求的
这种分页原理比普通的分页更聪明一些阅读全文
相信这是个大家都常见的问题,解决方式各自不一,欢迎交流,尤其是对分页有需求的
这种分页原理比普通的分页更聪明一些阅读全文
公司SVN仓库
- 大部svn仓库
- 产品svn仓库
- 产品内代码用svn仓库
- branches
- 分支
- 现在的开发模式中,不推荐多分支开发,此处不做为重点
- tags
- 用于版本控制、测试、发布等用途
- trunk
- 主干
- libs
- 共用库函数
- 可以存在外部项目引入
- services
- www
- 静态文件存放
- images
- 页面配图
- public
- 404.html
- 500.html
- favicon.ico
- robots.txt
- css
- css文件
- daemon
- 存放后台守护进程相关代码
- config
- 存放本项目的配置文件
- template
- 存放本项目的模板文件
- 一般都是用smarty模板引擎
- test
- 存放测试和单元测试代码
- program
- 存放项目中属于web前端上的代码
- 分层结构
- application
- 应用程序层
- business
- 业务逻辑层
- component
- 组件层
- datadriver
- 数据驱动层
- systemdriver
- 系统驱动层
- 存放项目中属于web前端上的代码
- branches
- 产品内代码用svn仓库
- 产品svn仓库
来自QQ群:
svn也是有目录结构的... 分支下建分支.
比如 svn/tags/tag1
你想建立 svn/tags/tag1/tag2
那就直接建立这么个文件夹就好了..
但是tag1这个再检出就已经不是你的项目了... (多了tag2)
如果你是想在tag1的基础上, 建立新的tag.
那么建立tag的时候, 从tag1建就好了...
http://toys.lerdorf.com/archives/57-ZeroMQ-+-libevent-in-PHP.html
写了一个简单的队列任务处理。多进程任务,异步任务可能会用到这个(主要是命令行应用)
比如,任务的某个一个环节速度十分不稳定,可能执行几秒,也可能执行几分钟,
我就可以把那个环节包括前面的部分扔进队列,多跑几个进程,同时往队列里面写。
然后后面比较快的环节只跑一个处理任务就OK了。让整体速度达到更好的效果。阅读全文
写了一个简单的队列任务处理。多进程任务,异步任务可能会用到这个(主要是命令行应用)
比如,任务的某个一个环节速度十分不稳定,可能执行几秒,也可能执行几分钟,
我就可以把那个环节包括前面的部分扔进队列,多跑几个进程,同时往队列里面写。
然后后面比较快的环节只跑一个处理任务就OK了。让整体速度达到更好的效果。阅读全文
FRAME ICMP IP UDP TCP
traceroute 数据传输路径
ping 一般用ICMP协议,定制可以使用IP ICMP
ping 192.168.0.1 -n -c l -s 65527
tranceroute -n -I 10.210.121.128
tcpdump -n -s o -l eth0 icmp
ifconfig eth0|grep inet
ping -b -n -c l 192.168.0.1
[root@vm0000055 templates]# ping -c 1 -s 65535 192.168.0.1
Error: packet size 65535 is too large. Maximum is 65507
常见 IP 碎片攻击详解阅读全文
traceroute 数据传输路径
ping 一般用ICMP协议,定制可以使用IP ICMP
ping 192.168.0.1 -n -c l -s 65527
tranceroute -n -I 10.210.121.128
tcpdump -n -s o -l eth0 icmp
ifconfig eth0|grep inet
ping -b -n -c l 192.168.0.1
[root@vm0000055 templates]# ping -c 1 -s 65535 192.168.0.1
Error: packet size 65535 is too large. Maximum is 65507
常见 IP 碎片攻击详解阅读全文
IE中,快捷键是CTLR+F5.
Firefox中,快捷键是CTLR+SHIFT+R.
Firefox中,快捷键是CTLR+SHIFT+R.
其实本质是:
Mysql查询从以往常规的的Limit:
$offset*($page-1),$offset
0,20
20,20
40,20
........
变为了:
永远的:
0,20 ,但前面有一个:where id>动态的数值,这个id是有索引的,所以,查询起来更快一些。
这里的Id是经过计算后的一个数值,主要是它用到了索引,所以在大数据量下快了不是一星半点。
=========================================================
阅读全文
Mysql查询从以往常规的的Limit:
$offset*($page-1),$offset
0,20
20,20
40,20
........
变为了:
永远的:
0,20 ,但前面有一个:where id>动态的数值,这个id是有索引的,所以,查询起来更快一些。
这里的Id是经过计算后的一个数值,主要是它用到了索引,所以在大数据量下快了不是一星半点。
=========================================================
阅读全文
FCKeditor 2.6.4 released 之前版本,全部存在严重漏洞,请立即检查您的服务器、程序中是否调用了FCKeditor编辑器,如果存在,请升级到 2.6.4 released版本。
如果不需要上传功能,请将上传功能相关文件删除,如果需要上传功能,请严格限制上传文件后缀,并配置目录权限,禁止上传目录的PHP、ASP、JSP执行权限。
我们发现在一些产品中集成了带有严重漏洞的 FCKeditor 富文本编辑器。请管理员和程序员自查自己的系统、程序。
下月开始,系统部将对服务器上的 FCKeditor 进行专项扫描,届时如果发现仍然存在漏洞的FCKeditor,将对相关责任人进行相应处理。
FCKeditor是一款流行的富文本编辑器,还支持强大的文件上传功能,可以工作在asp,aspx,php,perl,python等脚本环境,由于用户多
功能强大,所以也成为了黑客重点攻击对象。
一些程序员喜欢将某个版本的FCKeditor打包,每次程序都调用这个版本,一些程序也会直接集成该编辑器,往往这种习惯都
导致将一个旧版本的编辑器嵌入到了程序中.
漏洞示例(asp下):
http://www.xxx.com/admin/FCKeditor/editor/filemanager/browser/default/browser.html?Type=../&Connector=connectors/asp/connector.asp
将type改为../,这样将跳出目录文件类型的限制,还可以进行目录遍历.
即使做了不让跳转,配合服务器的一些缺陷也可以得到webshell,比如Windows2003服务器使用fckeditor建立一个xx.asp的目录,那么向
这个目录下上传任意文件,比如jpg(包含可执行脚本代码),都可以被服务器执行.
webshell地址:
http://www.xxx.com/shell.cer
漏洞示例(jsp下):
查看配置和列出目录下的文件:
http://www.xxx.com/fckeditor/editor/filemanager/browser/default/connectors/jsp/connector?
Command=FileUpload&Type=Image&CurrentFolder=%2F
webshell地址:
http://www.xxx.com/fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector
漏洞示例(php下):
fckeditor采用黑名单方式进行过滤,Windows下上传xxx.php+空格即可绕过检测.
另外PHP版本对媒体类型没有做任何限制,可以上传任意文件.
以上漏洞均在最新版本(2.6.4)中解决,可以在http://www.fckeditor.net/download下载到最新版本.
另外一些fckeditor的设置,如果你不提供上传服务,或者有更好的上传方案,那删除掉目前的上传功能是非常必要而且彻底的!(删除FCKeditor\editor
\filemanager).
根目录下的fckconfig.js可以进行具体的设置,根据以下开关来限制上传的风险(多一种类型就多一种风险,没必要的请关闭)
FCKConfig.LinkBrowser = true;
FCKConfig.ImageBrowser = true ;
FCKConfig.FlashBrowser = true ;
FCKConfig.LinkUpload = true ;
FCKConfig.ImageUpload = true ;
FCKConfig.FlashUpload = true ;
对你存储上传文件的目录,比如UserFilesPath = "~/UserFiles",禁止下面的脚本文件执行.
新版本中提供这么个函数:
private bool CheckAuthentication()
{
// WARNING : DO NOT simply return "true". By doing so, you are allowing
// "anyone" to upload and list the files in your server. You must implement
// some kind of session validation here. Even something very simple as...
//
// return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
//
// ... where Session[ "IsAuthorized" ] is set to "true" as soon as the
// user logs in your system.
return false;
}
去掉注释,写入
try{
return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true ;
}
catch{return false;}
在登录后台成功的地方写入session,Session["IsAuthorized"] = true;即可,这样就不会任何人都可以进行上传等操作了.
PS:FCKeditor检测路径关键字editor/filemanager, 另外fckconfig.js 是编辑器的配置文件,里面有允许&拒绝上传的文件类型配置等,这个文件基本不会
改名.
PS2:因为FCKeditor的广泛使用,黑客仍然会重点攻击该编辑器,所以不推荐使用该程序,建议使用内部开发的一些富文本编辑器
如果不需要上传功能,请将上传功能相关文件删除,如果需要上传功能,请严格限制上传文件后缀,并配置目录权限,禁止上传目录的PHP、ASP、JSP执行权限。
我们发现在一些产品中集成了带有严重漏洞的 FCKeditor 富文本编辑器。请管理员和程序员自查自己的系统、程序。
下月开始,系统部将对服务器上的 FCKeditor 进行专项扫描,届时如果发现仍然存在漏洞的FCKeditor,将对相关责任人进行相应处理。
FCKeditor是一款流行的富文本编辑器,还支持强大的文件上传功能,可以工作在asp,aspx,php,perl,python等脚本环境,由于用户多
功能强大,所以也成为了黑客重点攻击对象。
一些程序员喜欢将某个版本的FCKeditor打包,每次程序都调用这个版本,一些程序也会直接集成该编辑器,往往这种习惯都
导致将一个旧版本的编辑器嵌入到了程序中.
漏洞示例(asp下):
http://www.xxx.com/admin/FCKeditor/editor/filemanager/browser/default/browser.html?Type=../&Connector=connectors/asp/connector.asp
将type改为../,这样将跳出目录文件类型的限制,还可以进行目录遍历.
即使做了不让跳转,配合服务器的一些缺陷也可以得到webshell,比如Windows2003服务器使用fckeditor建立一个xx.asp的目录,那么向
这个目录下上传任意文件,比如jpg(包含可执行脚本代码),都可以被服务器执行.
webshell地址:
http://www.xxx.com/shell.cer
漏洞示例(jsp下):
查看配置和列出目录下的文件:
http://www.xxx.com/fckeditor/editor/filemanager/browser/default/connectors/jsp/connector?
Command=FileUpload&Type=Image&CurrentFolder=%2F
webshell地址:
http://www.xxx.com/fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector
漏洞示例(php下):
fckeditor采用黑名单方式进行过滤,Windows下上传xxx.php+空格即可绕过检测.
另外PHP版本对媒体类型没有做任何限制,可以上传任意文件.
以上漏洞均在最新版本(2.6.4)中解决,可以在http://www.fckeditor.net/download下载到最新版本.
另外一些fckeditor的设置,如果你不提供上传服务,或者有更好的上传方案,那删除掉目前的上传功能是非常必要而且彻底的!(删除FCKeditor\editor
\filemanager).
根目录下的fckconfig.js可以进行具体的设置,根据以下开关来限制上传的风险(多一种类型就多一种风险,没必要的请关闭)
FCKConfig.LinkBrowser = true;
FCKConfig.ImageBrowser = true ;
FCKConfig.FlashBrowser = true ;
FCKConfig.LinkUpload = true ;
FCKConfig.ImageUpload = true ;
FCKConfig.FlashUpload = true ;
对你存储上传文件的目录,比如UserFilesPath = "~/UserFiles",禁止下面的脚本文件执行.
新版本中提供这么个函数:
private bool CheckAuthentication()
{
// WARNING : DO NOT simply return "true". By doing so, you are allowing
// "anyone" to upload and list the files in your server. You must implement
// some kind of session validation here. Even something very simple as...
//
// return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );
//
// ... where Session[ "IsAuthorized" ] is set to "true" as soon as the
// user logs in your system.
return false;
}
去掉注释,写入
try{
return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true ;
}
catch{return false;}
在登录后台成功的地方写入session,Session["IsAuthorized"] = true;即可,这样就不会任何人都可以进行上传等操作了.
PS:FCKeditor检测路径关键字editor/filemanager, 另外fckconfig.js 是编辑器的配置文件,里面有允许&拒绝上传的文件类型配置等,这个文件基本不会
改名.
PS2:因为FCKeditor的广泛使用,黑客仍然会重点攻击该编辑器,所以不推荐使用该程序,建议使用内部开发的一些富文本编辑器
在FROM表单提交时,浏览器会自动对提交内容进行转码,会将除“- ”,“_”,数字和字母之外的所有字符进行%形式的URL编码,其中空格会被转换成“+”。
在PHP中函数urlencode对字符串URL编码的处理方式同浏览器相同,所以如果对一个字符串进行2次或2次以上的urlencode将会把空格转换成“+”
例:$str = "ce shi";
echo urlencode($str);// ce+shi
echo urlencode(urlencode($str));//ce%2bshi
echo urlencode(urlencode(urlencode($str)));//ce%2bshi
%2b在服务器接收到后会解码为“+”
若使用rawurlencode则会直接将空格转换为%20,不存在此问题
但是:
使用utf-8模式对空格先编码然后再解码后得到的不是空格字符,而是一个代码为160的char字符,如果不注意这一点将导致对空格判断的错误,我没有试验在其他encoding下的效果。
程序中使用空格分割字符串分隔符数组现在是这样:new char[3] { ' ', ' ',Convert.ToChar(160) }.
其中第一个是半角空格,第二个是全角空格,第三个就是Convert.ToChar(160)
在PHP中函数urlencode对字符串URL编码的处理方式同浏览器相同,所以如果对一个字符串进行2次或2次以上的urlencode将会把空格转换成“+”
例:$str = "ce shi";
echo urlencode($str);// ce+shi
echo urlencode(urlencode($str));//ce%2bshi
echo urlencode(urlencode(urlencode($str)));//ce%2bshi
%2b在服务器接收到后会解码为“+”
若使用rawurlencode则会直接将空格转换为%20,不存在此问题
但是:
使用utf-8模式对空格先编码然后再解码后得到的不是空格字符,而是一个代码为160的char字符,如果不注意这一点将导致对空格判断的错误,我没有试验在其他encoding下的效果。
程序中使用空格分割字符串分隔符数组现在是这样:new char[3] { ' ', ' ',Convert.ToChar(160) }.
其中第一个是半角空格,第二个是全角空格,第三个就是Convert.ToChar(160)