MYSQL ROOT密码找回

2009年6月30日

1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:mysql,进入C:mysqlbin
4.跳过权限检查启动MySQL,
c:mysqlbin>mysqld-nt –skip-grant-tables
5.重新打开一个窗口,进入c:mysqlbin目录,设置root的新密码
c:mysqlbin>mysqladmin -u root flush-privileges password “newpassword”
c:mysqlbin>mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以用新的密码链接到Mysql了。

号外

ubuntu linux wifi 无线网络连接指南

2009年5月26日

今天给笔记本安装了一个UBUNTU系统,发现不能用无线。
下面是网上找到的方法。
安装完成后,下载 wifi-radar这个软件,其实就是无线网络自动搜索和连接的小程序
如果使用 ubuntu/debian 可以直接使用 apt-get 安装
$ sudo apt-get install wifi-radar
如果没有让 wifi-radar 守护进程自动装载,请使用
$ sudo /etc/init.d/wifi-radar start
运行,然后启动 wifi-radar
$ sudo wifi-radar
开始选择你可以连接的无线节点吧!
如果wifi-radar工作不正常,使用下面方法重新加载一次 bcm43xx 模块就行了
$ sudo rmmod bcm43xx
$ sudo modprobe bcm43xx
现在,不管怎么样都能连上啦,适合常常变换地点使用无线网络的朋友。

無法執行副進程’’su-to-root”

sudo apt-get install menu

linux

163开源镜像站

2009年5月14日

http://mirrors.163.com/
速度不错哟!

Centos 5 源

cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
vi CentOS-Base.repo

复制下面的代码


# CentOS-Base.repo
#
# This file uses a new mirrorlist system developed by Lance Davis for CentOS.
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#   

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5  

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5  

#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
baseurl=http://mirrors.163.com/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5  

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5  

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

号外

PHPCMS2008 新的分页样式

2009年5月14日

先看看样式

20090427_f86e215380fbf968ceeea6qp2he1byvl

include/global.func.php

找到

function page

把这个函数给注释了。 完成后应该是这样的

 /*function pages($total, $page = 1, $perpage = 20, $urlrule = '', $array = array(), $catid = 0)
{
global $PHPCMS;
if($total < 1) return '';
if($urlrule == '') $urlrule = url_par('page={$page}');
$pages = ceil($total/$perpage);
$page = min($pages, $page);
$prepage = $page - 1;
$prepage = max($prepage, 1);
$nextpage = $page+1;
$nextpage = min($nextpage, $pages);
if($catid)
{
  $url = load('url.class.php');
  $firstpage = $url->category($catid, 1, 1);
  $prepage = $url->category($catid, $prepage, 1);
  $nextpage = $url->category($catid, $nextpage, 1);
        $lastpage = $url->category($catid, $pages, 1);
  $urlpre = $url->category($catid, '', 1);
}
else
{
  $firstpage = pageurl($urlrule, 1, $array);
  $prepage = pageurl($urlrule, $prepage, $array);
  $nextpage = pageurl($urlrule, $nextpage, $array);
        $lastpage = pageurl($urlrule, $pages, $array);
  $urlpre = pageurl($urlrule, '', $array);
}
$data = str_replace('"', '\"', $PHPCMS['pageshtml']);
eval("\$url = \"$data\";");
return $url;
}*/

然后在之这个函数的前台或后面插入。

function pages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(), $catid = 0)
{
$multipage = '';
if($num > $perpage)
{
  $page = 10;
  $offset = 2; 

  $pages = ceil($num / $perpage);
  $from = $curr_page - $offset;
  $to = $curr_page + $page - $offset - 1;
  if($page > $pages)
  {
   $from = 1;
   $to = $pages;
  }
  else
  {
   if($from < 1)
   {
    $to = $curr_page + 1 - $from;
    $from = 1;
    if(($to - $from) < $page && ($to - $from) < $pages)
    {
     $to = $page;
    }
   }
   elseif($to > $pages)
   {
     $from = $curr_page - $pages + $to;
     $to = $pages;
    if(($to - $from) < $page && ($to - $from) < $pages)
    {
     $from = $pages - $page + 1;
    }
   }
  }
  if($urlrule == '') $urlrule = url_par('page={$page}');
  $url = load('url.class.php');
  $multipage .= $catid ? '<a href="'.$url->category($catid, 1, 1).'">&lt;&lt;</a>  ' : '<a href="'.pageurl($urlrule, 1, $array).'">&lt;&lt;</a>  ';
  for($i = $from; $i <= $to; $i++)
  {
   if($i != $curr_page)
   {
    $multipage .= $catid ? '<a href="'.$url->category($catid, $i, 1).'">['.$i.']</a> ' : '<a href="'.pageurl($urlrule, $i, $array).'">['.$i.']</a> ';
   }
   else
   {
    $multipage .= '<u><b>['.$i.']</b></u> ';
   }
  }
  $multipage .= $pages > $page ? " ... <a href=".($catid ? $url->category($catid, $pages, 1) : pageurl($urlrule, $pages, $array))."> [$pages] &gt;&gt;</a>" : " <a href=".($catid ? $url->category($catid, $pages, 1) : pageurl($urlrule, $pages, $array)).">&gt;&gt;</a>";
}
return $multipage;
}

号外, 我的工作

Nginx 服务器中PHP获得地址的问题

2009年5月14日

前一段时间看了张宴兄的Nginx服务器的配置的文章,在公司把自己的台式机给做成了Centos 5

后来发现在Nginx  用


$_SERVER['SERVER_NAME']

只能得到Nginx里面设置的第一个域名。后来试着用

getenv('SERVER_NAME')

也是一样的结果

用phpinfo输出发现。

$_SERVER['HTTP_HOST']

可以得以真正的地址,不过这个是由HEAD头来取的,如果用户是一个局域网里面做的代理出来的,那么得到的地址是这个代理机的地址,而不是域名的地址了。

在网上查了一下资料,发现在可以用(来自symfony框架)

$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');

来代替。

杂谈

很好玩的一个FLASH动画的游戏

2009年3月11日

MYSQL SQL连接语句

2009年1月19日

有的时候我们要给一个字段设置值。这个值可能会是别的几个字段合在一起的。

所以我们要用这个方法来实现他。

select * from table1 where a = concat('1','2','3');

上面的语句最后就成了

select * from table1 where a = '123'

这里面还可以直接用字段的名字

如我们的记录中有一个条记录,他的A要等于B加上123   现在我们来为A设置值

update table1 set A=concat(B,'123');

这样就设置成功了。

程序优化

行业大会成了广告会

2009年1月11日

最近去参加IDC圈办的IDC大会。

看着全国各地来的人之多。开始的时候还是感觉很不错的。我是当天下午才去的,上午在公司里面和一个客户开会。

大会开始了。下午一上台来的人就是一个广告。当然其题目不是广告,题目是《安全保障为互联网企业筑起一道长城》结果成了中创软件的公司 发展史介绍。后面来了一个群英科技的,这人一开口就表现出没有文化,提出一个所为《建立行业标准,提升业内合作》,说白了就是就是想说。各地几个大的IDC合在一起来垄断这个行业。把那些小的IDC给弄死。把行业的准入门槛提高,让新进入的IDC也减少。   为什么说他没有文化,做行业标准,是为了更好的规范市场,不是给你那几个做得大的公司垄断市场的,凭什么就由你来提出行业的标准。说自己的题目只有了2分钟,后面又是十几分钟的公司产品介绍。大家都是做IDC的。谁会来听你说你的虚拟主机好呀!说真的,我看到下面的人听到上面的那些人在那里说自己的产品好的时候,他们都在笑,是BS的笑。

还有要BS的就是,是个人上去就说自己是全中国最大的。什么是全中国最牛B的。有必要吗?

还有那中间还给发一个什么奖。这也太假了吧!一看就知道是出了钱给赞助的。那些人。

把后面印的赞助商给一一发了一个奖。

希望以后组织者多把时间用在把会议给弄好上,务实一些。玩这些是没有意义的。

业界资讯

公司大了。事儿都不好做

2009年1月6日

反正公司大了。是事儿不好做了。

很好笑的一个事儿。对外的工作好做了。

对内的工作变得,异常的困难。

因为公司很大。所以对外的时候很EASY就可以做好。

可对内呢?部门之间的沟通变得困难,大家都有自己的事儿,要让别人提前完成你的事儿很难。

杂谈

安全编程法则

2008年12月30日

标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去完成这些内容。 未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方法可以避免发生安全问题。

  1. SQL注射
    1. (*) 在组合SQL语句时要使用SQL变量绑定功能
    2. (*) 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义
    3. 不要将错误信息原封不动地显示在浏览器中。
    4. 为访问数据库的用户设置适当的权限。
  2. 操作系统命令行注射
    1. (*) 避免使用能启动shell命令的语言
    2. 使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作
  3. 不检查路径名参数/目录遍历
    1. (*) 不要将外部传进来的参数直接作为文件名来使用
    2. (*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径
    3. 为Web服务器上的文件设置正确的访问权限
    4. 检查文件名
  4. 会话管理的问题
    1. (*) 用难以推测的内容作为会话ID
    2. (*) 不要在URL中保存会话ID
    3. (*) 为https协议中使用的cookie设置secure属性
    4. (*) 登录成功后生成新的会话
    5. (*) 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之
    6. 不使用固定值作为会话ID
    7. 将会话ID保存到Cookie中时,要设置有效期限
  5. 跨站脚本攻击(XSS)
    • 不允许输入HTML内容时的解决方法
      1. (*) 输出到页面上的所有内容都要转义
      2. (*) 输出URL时仅允许以“http://”或“https://”开头的URL
      3. (*) 不要动态生成<script>…</script>的内容
      4. (*) 不要从外部网站读入样式表
      5. 检查输入内容
    • 允许输入HTML内容时的解决方法
      1. (*) 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分
      2. 使用脚本删除输入的HTML内容中的相关字符串
    • 通用解决方法
      1. (*) 应答的HTTP头重指定Content-Type的charset属性
      2. 为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性
  6. 跨站请求伪造(CSRF)
    1. (*) 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行
    2. (*) 执行业务之前再次要求输入密码
    3. (*) 确认Referer是否正确,只有正确时才执行
    4. 执行重要操作时,向预先设置的邮件地址中发送邮件
  7. HTTP头注射
    1. (*) 不直接输出HTTP头,而使用运行环境提供的头信息输出API
    2. (*) 无法使用API时,要禁止输入的头信息中的换行
    3. 删除所有外部输入中的换行
  8. 邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)
    1. (*) 不使用外部参数作为邮件头信息
    2. 必须用外部参数设置头信息时,要删除其中的危险字符。

号外