目前日期文章:200805 (14)

瀏覽方式: 標題列表 簡短摘要

安全模式 safe_mode

PHP 的安全模式是為了試圖解決共享伺服器(shared-server)安全問題而設立的。在結構上,試圖在 PHP 層上解決這個問題是不合理的,但修改 WEB 伺服器層和操作系統層顯得非常不現實。因此許多人,特別是 ISP,目前使用安全模式。


保安措施和安全模式


表格 22-1. 保安措施和安全模式配置指令

名稱 預設值 作用範圍
safe_mode "0" PHP_INI_SYSTEM
safe_mode_gid "0" PHP_INI_SYSTEM
safe_mode_include_dir NULL PHP_INI_SYSTEM
safe_mode_exec_dir "" PHP_INI_SYSTEM
safe_mode_allowed_env_vars PHP_ PHP_INI_SYSTEM
safe_mode_protected_env_vars LD_LIBRARY_PATH PHP_INI_SYSTEM
open_basedir NULL PHP_INI_SYSTEM
disable_functions "" PHP_INI_SYSTEM
PHP_INI_* 常數的進一步詳細說明與定義見 ini_set()


這裡是配置指令的一些簡短解釋。

safe_mode boolean

是否啟用 PHP 的安全模式。更多訊息請閱讀安全一章。

safe_mode_gid boolean

預定情況下,安全模式在打開文件時會做 UID 比較檢查。如果你想將其放寬到 GID 比較,則打開 safe_mode_gid。是否在文件連接時使用 UIDFALSE)或者 GIDTRUE)來做檢查。

safe_mode_include_dir string

當從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時越過 UID/GID 檢查。

從 PHP 4.2.0 開始,本指令可以接受和 include_path 指令類似的風格用分號隔開的路徑,而不只是一個目錄。

safe_mode_exec_dir string

如果 PHP 使用了安全模式,system() 和其它執行系統程序的函式將拒絕啟動不在此目錄中的程序。

safe_mode_allowed_env_vars string

設置某些環境變數可能是潛在的安全缺口。本指令包含有一個逗號分隔的前綴列表。在安全模式下,用戶只能改變那些名字具有在這裡提供的前綴的環境變數。預定情況下,用戶只能設置以 PHP_ 開頭的環境變數(例如 PHP_FOO = BAR)。

註: 如果本指令為空,PHP 將使用戶可以修改任何環境變數!

safe_mode_protected_env_vars string

本指令包含有一個逗號分隔的環境變數的列表,最終用戶不能用 putenv() 來改變這些環境變數。甚至在 safe_mode_allowed_env_vars 中設置了允許修改時也不能改變這些變數。

open_basedir string

將 PHP 所能打開的文件限制在指定的目錄樹。本指令不受安全模式打開或者關閉的影響。

當一個腳本試圖用例如 fopen 或者 gzopen 打開一個文件時,該文件的位置將被檢查。當文件在指定的目錄樹之外時 PHP 將拒絕打開它。所有的符號連接都會被解析,所以不可能通過符號連接來避開此限制。

特殊值 . 指定了存放該腳本的目錄將被當做基准目錄。

在 Windows 中,用分號分隔目錄。在任何其它系統中用冒號分隔目錄。作為 Apache 模塊時,父目錄中的 open_basedir 路徑自動被繼承。

用 open_basedir 指定的限制實際上是前綴,不是目錄名。也就是說 "open_basedir = /dir/incl" 也會允許連接 "/dir/include" 和 "/dir/incls",如果它們存在的話。如果要將連接限制在僅為指定的目錄,用斜線結束路徑名。例如:"open_basedir = /dir/incl/"。

註: 支援多個目錄是 3.0.7 加入的。

預定是允許打開所有文件。

disable_functions string

本指令允許你基於安全原因禁止某些函式。接受逗號分隔的函式名列表作為參數。 disable_functions 不受安全模式的影響。

本指令只能設置在 php.ini 中。例如你不能將其設置在 httpd.conf

參見 register_globalsdisplay_errorslog_errors

safe_mode 設置為 on,PHP 將檢查當前腳本的擁有者是否和將被文件函式操作的文件的擁有者相匹配。例如:

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php 
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd

執行 script.php
<?php
readfile('/etc/passwd');
?>

如果安全模式被啟動,則將會導致以下錯誤:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not 
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2


同時,或許會存在這樣的環境,在該環境下,寬松的 GID 檢查已經足夠,但嚴格的 UID 檢查反而是不適合的。您可以用 safe_mode_gid 選項來控制這種檢查。如果設置為 On 則進行寬松的 GID 檢查;設置為 Off(預設值)則進行 UID 檢查。

除了 safe_mode 以外,如果您設置了 open_basedir 選項,則所有的文件操作將被限制在您指定的目錄下。例如:

<Directory /docroot>
php_admin_value open_basedir /docroot
</Directory>

如果您在設置了 open_basedir 選項後執行同樣的 script.php,則其結果會是:
Warning: open_basedir restriction in effect. File is in wrong directory in 
/docroot/script.php on line 2


您也可以單獨地屏蔽某些函式。請注意 disable_functions 選項不能在 php.ini 文件外部使用,也就是說您無法在 httpd.conf 文件的按不同虛擬主機或不同目錄的方式來屏蔽函式。 如果我們將如下內容加入到 php.ini 文件:

disable_functions readfile,system

則我們會得到如下的輸出:
Warning: readfile() has been disabled for security reasons in 
/docroot/script.php on line 2

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()


在PHP.ini中

short_open_tag參數控制語法分析器是否識別快捷鍵< ?...?>,類似於識別標準鍵< ?php...?>。

如果這一參數與其它語言發生衝突,或者如果你想在PHP代碼中使用嚴格語法規則,就關閉該參數。

short_open_tag = On

還有發生錯誤時若不顯示php版號 則將

expose_php = OFF

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()


直接用sql語法
SELECT * FROM table_name ORDER BY RAND() LIMIT 5;

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()


自動裁切縮圖程式


               
使用方式
autoResizeImage($srcjpeg,245,184,$dstjpeg);
freeResizeImage($srcjpeg,245,245,184,$dstjpeg);

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()



The Original

Nathalie

imagefilter() called with different filter constants

img_filter_brightness_5.png
Filter: IMG_FILTER_BRIGHTNESS
Code to reproduce:
<?php
$image
imagecreatefrompng('nathalie.png');
imagefilter($imageIMG_FILTER_BRIGHTNESS5);
imagepng($image'img_filter_brightness_5.png');
imagedestroy($image);
?>

img_filter_brightness_50.png
Filter: IMG_FILTER_BRIGHTNESS
Code to reproduce:
<?php
$image
imagecreatefrompng('nathalie.png');
imagefilter($imageIMG_FILTER_BRIGHTNESS50);
imagepng($image'img_filter_brightness_50.png');
imagedestroy($image);
?>

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

這個好用的工具 Google Chart API,真是令人感動,隨然大家使用 Google Docs試算表就可以畫數線圖表,但是 Google Chart API 無中生有的本事,讓需要的人顯得更方便(雖然參數的設定有點複雜)。

天天是好人 XD

Google Chart API 的出現不失為網路開放風中另一個很棒的創意,相信 Google Chart API 未來會跟 Google Docs 的試算表與簡報工具越來越緊密,因為我覺得 Google Docs 的圖表呈現目前感覺有點弱,但是 Google Chart API 目前不支援中文,所以要用他來產生一些中文圖表就有點侷限,真可惜!總知會用且能用的好的話,他就是好工具囉!

延伸閱讀:

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

最近參與的一個專案,客戶希望新增加一個功能,要把廠商的位置顯示在google map上。終於有機會可以來試試google map api。

首先先去 http://code.google.com/apis/maps/signup.html 申請一組api key,這組key只能用在你設定網站上面。

key產生之後,還有一個簡單的sample code可以參考,複製貼上後,我的第一個map就產生了,真是方便。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps JavaScript API Example</title>
    <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=your api key"
      type="text/javascript"></script>
    <script type="text/javascript">

    //<![CDATA[

    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
      }
    }

    //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 500px; height: 300px"></div>
  </body>
</html>


接下來用這個sample來做一下延伸

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

Google 繼前天更新 Google Code 為多語系後(包含簡體中文),進而更新 Google Maps API 文件(剛公佈時僅有第一層內容有翻譯),我想這對於華人地區學習 Google Maps 的應用與 Mapplets 的開發有相當大的幫助,像我英文差的以後就可以用到啦!

Google Code

因為這消息也讓我注意到 Mapplets 的蓬勃發展,Mapplets 就是在 Google Maps 上開發的 Gadget,目前已經很多高手發展了一些不錯的玩具

期中較令我注意的是 台灣汽車行車導航 這工具,它結合了 UrMap 的導航功能,讓使用者可以在 Google Maps 上規劃路徑,補足現有 GMaps 現有的遺憾,真是個很值得推薦的 Mashup。

作者在它的 blog 有詳細的操作說明,可以移駕過去看看

延伸閱讀:

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

去年底 Google 推出了 Chart API,讓大家可以使用網址來畫圖表,現在 Google Maps 也不惶多讓,推出靜態(圖片)式地圖 Static Maps API,讓網友們使用網址就可以畫地圖囉!

Google 的 Static Maps,如果有在使用 Google 的人應該不陌生,它會出現在一般網路搜尋及地圖搜尋中(當 javascript disable 狀態時),但是把這功能與眾多鄉民分享,我想也只有那麼有錢的 G 大神辦的到。

以下圖為例,藍色的標記是 101 大樓,綠色的標記是我最常拍攝 101 的點。

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

用以下的方式,可以讓大部份瀏覽器 (主要是 IE) 詢問你是否要下載檔案 (而不是直接開啟) 。







  • $file_name: 這是給瀏覽器看的檔案名稱,也就是下載視窗會出現的那個檔名;它可以跟實際檔案的名稱不一樣!
  • $file_path: 會連到實際檔案的位置,也就是該檔案在伺服器上的真實路徑
  • $file_size: 檔案的大小。

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()

JS最常用的55個經典技巧

1. oncontextmenu="window.event.returnValue=false" 將徹底屏蔽鼠標右鍵


<table border oncontextmenu=return(false)><td>no</table> 可用於Table



2. <body onselectstart="return false"> 取消選取、防止複製



3. onpaste="return false" 不准粘貼



4. oncopy="return false;" oncut="return false;" 防止複製



5. <link rel="Shortcut Icon" href="favicon.ico"> _fcksavedurl=""favicon.ico">" _fcksavedurl=""favicon.ico">" _fcksavedurl=""favicon.ico">" IE地址欄前換成自己的圖標



6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夾中顯示出你的圖標



7. <input style="ime-mode:disabled"> 關閉輸入法 

kevin0523 發表在 痞客邦 PIXNET 留言(1) 人氣()

找更多相關文章與討論