Skip to content

Zeroplex 生活隨筆

軟體開發和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: PHP

用 PHP 隱藏檔案下載位置

Posted on 2007 年 8 月 27 日2021 年 3 月 12 日 By 日落 在〈用 PHP 隱藏檔案下載位置〉中尚無留言

很多網站都會怕大家知道檔案位置以後,開始隨便散步網址給大家盜連,這樣網站的流量馬上會爆掉。另外也有可能讓駭客找到漏洞上傳 Web Shell,並且開始遙控……。

後來玩 PHPWind 論壇的時候,發現論壇可以讓上傳的檔案名稱全部改掉,在下載的時候也看不到檔案在伺服器上面的位置,所以跑去看了一下原始碼是怎麼寫的。PHPWind 檔案下載的程式是寫成 function 放在 /job.php 裡面,找到下面這行:

elseif($action=='download')

他的確是用 header() 來做檔案連結,但是不是我想像中的 header(“Location: URL”),這樣其實瀏覽器還是可以看到檔案位置,他是用 header 讓瀏覽器知道之後傳的資料為檔案內容,讓瀏覽器把資料寫成檔案,然後由伺服器先讀檔案內容以後傳給瀏覽器。所以瀏覽器從頭到尾只知道要存檔時預設的檔名、檔案類型和檔案內容,完全不知道檔案在伺服器上的位址。下面是 job.php 負責檔案下載的程式片段:

header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()+31536000 ).' GMT');
header('Pragma: no-cache');
header('Content-Encoding: none');
header('Content-Disposition: '.$attachment.'; filename='.$name);
header('Content-type: '.$fileext);

if($attach_url && !file_exists("$attachdir/$attachurl") && function_exists('file_get_contents')){
$downcontent=file_get_contents($attach_url."/$attachurl");
}else{
$filesize = filesize($attachdir.'/'.$attachurl);
header('Content-Length: '.$filesize);
$downcontent=readover("$attachdir/$attachurl");
}
echo $downcontent;
exit;

稍微改了一下以後會變成下面這幾行:

header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT');
header('Pragma: no-cache');
header('Content-Encoding: none');
header('Content-Disposition: '.'attachment'.'; filename='.$file_name);
header('Content-type: '.$file_type);
header('Content-Length: '.filesize( $file_path_on_server ));
$downcontent=file_get_contents( $file_path_on_server );
echo $downcontent;

$file_nam:瀏覽器存檔時預設的檔案名稱
$file_type:檔案類型,檔案上傳時會顯示
$file_path_on_server:檔案在伺服器上真正的路徑

至於 header() 的設定細節我還沒摸清楚,header() 的資料很多,目前還沒整理出一個頭緒,弄清楚以後再來做筆記吧。

Tags:PHP, 程式設計, 網路架站

PHP Captcha

Posted on 2007 年 8 月 24 日2021 年 3 月 12 日 By 日落 在〈PHP Captcha〉中尚無留言

PHP Captcha Security 有提供 PHP 程式碼,不會很複雜。

程式中可以自訂要使用的字型,不過必須把字型檔位置標示清楚(或是放在同一個目錄下)。

var $font = 'monofont.ttf';

後面有三行程式馬會決定圖片大小和文字字數,可以寫死或是用網頁傳參數。

$width = isset($_GET['width']) && $_GET['height'] < 600 ? $_GET['width'] : '120';
$height = isset($_GET['height']) && $_GET['height'] < 200 ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > 2 ? $_GET['characters'] : '6';

中間有三行會分別決定圖片的背景顏色、字體顏色以及雜點的顏色。

$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 20, 40, 100);
$noise_color = imagecolorallocate($image, 100, 120, 180);

程式產生圖形以後,會把字串記錄在 session 中,以後只要比對表單的字串和 session 中的字串,就可以知道輸入是否正確。

Tags:PHP, 資訊安全

用 PHP 連 MS SQL Server

Posted on 2007 年 8 月 22 日2021 年 3 月 12 日 By 日落 在〈用 PHP 連 MS SQL Server〉中尚無留言

PHP 預設只載入連接 MySQL 的函式庫,如果要使用 mssql_connect() 等函式庫必須先修改 php.ini,把 extension=php_mssql.dll 前面的註解拿掉,再重新啟動 Apache。

不知道是不是 Appserv 的關係,在重新啟動以後還是一樣沒辦法使用 mssql_connect(),會出現下面的錯誤訊息:

Fatal error: Call to undefined function mssql_connect() 

表示函式庫在啟動時沒有被載入。網路上看到的解決方法,就是把以下二個檔案複製到 system32 的資料夾裡面:

AppServphp5ntwdblib.dll
AppServphp5extphp_mssql.dll

重新啟動 Apache 後就可以使用函式庫了。

Tags:PHP

PHP short tag

Posted on 2007 年 7 月 20 日2021 年 3 月 12 日 By 日落 在〈PHP short tag〉中尚無留言

一般寫 PHP 程式都是放在 <?php ….. ?> 中間,直譯器才會去執行程式碼。如果你想偷懶使用 <? … ?> 就必須到 php.ini 修改一項設定:
short_open_tag = On

Tags:PHP, 網路架站, 資訊學習

php.ini extension setting

Posted on 2007 年 7 月 16 日2021 年 3 月 12 日 By 日落 在〈php.ini extension setting〉中尚無留言

聽 Aleiku 說 Mediawiki 需要使用到 php-xml 模組,想說用 make install clean 會比較輕鬆一點。開始設定 wiki 的時候後出現沒有 php-xml 的錯誤訊息,這時候去查了一下 ports,還蠻正常的啊

> pkg_info | grep php
php5-5.2.3 PHP Scripting Language (Apache Module and CLI)
php5-bz2-5.2.3 The bz2 shared extension for php
php5-ctype-5.2.3 The ctype shared extension for php
php5-gd-5.2.3 The gd shared extension for php
php5-gettext-5.2.3 The gettext shared extension for php
php5-iconv-5.2.3 The iconv shared extension for php
php5-mbstring-5.2.3 The mbstring shared extension for php
php5-mcrypt-5.2.3 The mcrypt shared extension for php
php5-mysql-5.2.3 The mysql shared extension for php
php5-mysqli-5.2.2 The mysqli shared extension for php
php5-openssl-5.2.2 The openssl shared extension for php
php5-openssl-5.2.3 The openssl shared extension for php
php5-pcre-5.2.3 The pcre shared extension for php
php5-readline-5.2.3 The readline shared extension for php
php5-session-5.2.2 The session shared extension for php
php5-session-5.2.3 The session shared extension for php
php5-simplexml-5.2.3 The simplexml shared extension for php
php5-spl-5.2.3 The spl shared extension for php
php5-xml-5.2.3 The xml shared extension for php
php5-zlib-5.2.2 The zlib shared extension for php
php5-zlib-5.2.3 The zlib shared extension for php

在去看 /usr/local/etc/ 才知道原來 php.ini 裡面並沒有 extension 的設定,而是另外存在 php/etensions.ini 裡面所以要自己在 php.ini 中加入設定檔的位置:
Include php/extensions.ini
好了以後再 apachectl restart。

Tags:PHP, 網路架站, 資訊學習

文章分頁

上一頁 1 ... 24 25 26 27 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows XD 作業系統 分享 好站推薦 專題 小提琴 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.