發佈於

安裝 .NET Framework 是有順序的

點閱: 9

.NET Framework 4 可以與舊版的 .NET Framework 並存安裝在單一電腦上。 如果先前已在電腦上啟用 IIS,.NET Framework 的安裝程序就會自動在 IIS 註冊 ASP.NET 4。 不過,如果在啟用 IIS 之前安裝 .NET Framework 4,您必須執行 ASP.NET IIS 註冊工具,才能在 IIS 註冊 .NET Framework,並建立使用 .NET Framework 4 的應用程式集區。

錯誤範例動作:先安裝了.NET Framework4.0 => 安裝IIS角色又裝了.NET Framework 3.5,然後網站就出現:

無法從組件 ‘System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ 載入型別 ‘System.ServiceModel.Activation.HttpModule’。

解決步驟如下:
1.開啟命令提示字元視窗。
2.然後指定作業路徑至C:\Windows\Microsoft.NET\Framework\v4.0.30319。
3.輸入【aspnet_regiis -i】後按ENTER。
4.再到IIS重新啟動 (iisreset)!

相關連結:
ASP.NET IIS 註冊工具(Aspnet_regiis.exe)

發佈於

php is_numberic函式造成的SQL隱碼攻擊漏洞

點閱: 18

php is_numberic函式造成的SQL隱碼攻擊漏洞

is_numberic 函式結構 bool is_numeric (mixed $var)
如果 var 是數字和數字字串則返回 TRUE,否則返回 FALSE。

接下來看個例子,說明這個函式是否安全。
複製程式碼 程式碼如下:

$s = is_numeric($_GET[‘s’])?$_GET[‘s’]:0;
$sql=”insert into test(type)values($s);”; //是 values($s) 不是values(‘$s’)
mysql_query($sql);

這個片段程式是判斷引數s是否為數字,是則返回數字,不是則返回0,然後帶入資料庫查詢。(這樣就構造不了sql語句)
我們把‘1 or 1′ 轉換為16進位制 0x31206f722031 為s引數的值,程式執行後,再重新查詢這個表的欄位出來,不做過濾帶入另一個SQL語句,將會造成2次注入。

總結
儘量不要使用這函式,如果要使用這個函式,建議使用規範的sql語句,條件加入單引號,這樣16進位制0x31206f722031就會在資料庫裡顯示出來。而不會出現1 or 1。

發佈於

PDO (PHP Data Object)

點閱: 29

PHP7已經不支援MySQL系列函數,而是改用MySQLi,或者PDO物件。

PDO是PHP5新加入的一個重大功能,因為在PHP5以前的php4/php3都是一堆的數據庫擴展來跟各個數據庫的連接和處理,無比煩瑣和低效。

mysql()指令集在php5.5之後是建議不要使用,而php7正式移除。
你現在如果還在用那個指令集未來可能會遇到不支援或無法維護,所以強烈建議無論如何改使用pdo。雖然會多花一些學習時間,但對未來是好的。

發佈於

[PHP] 強制使用https連線

點閱: 61

Google早已宣告將於2017年1月開始,在Google Chrome瀏覽器第56版,直接將沒有採用SSL安全認證的網站標示為「不安全」,並且在2014年就宣告,網站有導入SSL安全認證(HTTPS)服務,將會獲得優先收錄與優先排名,這就確定了未來網站都要導入SSL安全認證(HTTPS)服務,這更是搜尋引擎行銷必備條件之一。

所以網站的頁面,我們需要強制使用者使用https加密連線,也可來保護使用者輸入的資料。

這時可利用以下兩種檢查方式加上重新導向來達到:

檢查$_SERVER[“HTTPS”]

if(empty($_SERVER["HTTPS"])) {
$https_login = "https://" . $_SERVER["SERVER_NAME"] . '/login' ;
header("Location: $https_login");
exit();
}

檢查$_SERVER[“SERVER_PORT”]

if($_SERVER["SERVER_PORT"] != '443' ) {
$https_login = "https://" . $_SERVER["SERVER_NAME"] . '/login' ;
header("Location: $https_login");
exit();
}