2011年12月29日 星期四

jQuery 與 XPath 的比較

資料來源:
http://www.ibm.com/developerworks/xml/library/x-xpathjquery/index.html?ca=drs-
or
http://www.smartwei.com/xpath-vs-jquery.html
(是同一篇)


大致上, 就是只能在 jQuery 裡用到很簡單的 xPath, 太複雜的 xpath 語法就沒辦法,
簡單來說, 就是把 xpath 的 / 換成 空格, 就可以在 jQuery 裡執行,
遇到要選擇第幾個 element 時, 就用 : 或用 contains()
參考看看:
http://www.w3school.com.cn/jquery/jquery_ref_selectors.asp

jQuery 的 [] 中括號, 好像只能用來處理屬性的樣子.

jQuery 教程 + jQuery 参考手册

jQuery 教程 + jQuery 参考手册
URL: http://www.w3school.com.cn/jquery/index.asp

自從我看了這個站, 對 jQuery 更加的了解到, 要怎麼去使用,
像是

$('#test').val('2')
這行的功能, 是把 id='test' 的 value 設成 '2'

$('#test').val()
這行的功能, 是取得 id='test' 的 value.


.html() 用用法同 .val()

FileZilla是最好用的 ftp client 和 ftp server

ftp server download:
http://filezilla-project.org/download.php?type=server

* 說明, 在 user account 的設定上很直覺, 也有良好的管理者設定介面.


-----------------------------
ftp client download:
http://filezilla-project.org/download.php?type=client

* 說明: 穩定性高, 還會自動升級(更新) 既有的設定也不會因為升級就不見.

資料庫的內容繁轉簡(Big5 to GB)

要怎麼把 table 裡的 data, 轉成簡體(或繁體),
step 1: 開出 table 的欄位資訊.
step 2: 用loop 取得每一筆要被更新的 record.
step 3: 透過元件取出欄位內容, 繁轉簡之後, 放回去欄位裡, 再透過 recoredset.update 更新回 table 裡.


程式的說明:



程式碼:


* 說明1: open recordset, 記得不要開成 readonly, 醬子才可以用 recordset.update 更新資料.




* 說明2: 針對 table 的 TYPE_NAME 有 text 或 char 型別的, 才需要做內容的轉換.



執行結果:


==================================
相關說明:
----------------
Set RsObject = Server.CreateObject(”ADODB.Recordset:”)
RsObject.Open 資料來源,資料連結,指標型態,鎖定方式
資料來源:指定資料表名稱
資料連結:指定一個已Connection的物件


指標型態:
----------------
0:只能向前移動的指標,此為預設值
1:無法讀取其他使用著新增之資料,更新之資料會立即反應
2:可以及時反應其他使用著操作資料庫之狀況
3:無法及時反映其他使用著操作相同資料庫的狀況用於搜尋或新增記錄時使用


鎖定方式:
----------------
1:將Recordset 開啟為唯讀狀態,此為預設值
2:當使用著對Recordset 中的某筆資料作編輯時店鎖定記錄
3:當使用著呼叫Update方法對Recordset做更新時才鎖定記錄
4:使用著做批次更新時才鎖定記錄


===================================

原理是 call windows kernel32.dll 裡的 LCMapString  function, 理論上只要是可以 call dll 的 programming language 都可以做到offline 的簡/繁互轉.


如果您的需求和我一樣, 只是想把文字內容的簡繁部分轉換, 並不是想轉成 big5 或 gb, 整個輸出入都是 unicode, 而且也不想破壞其他非簡繁文字部分的話, 那麼結論就是照著本篇文章的一開始的 d1, d2 範例呼叫 VB 的 Strings.StrConv 帶上 0x0009 或是其他 SingleByte 字集的 localeID 當成第三個參數就可以啦!!!
如果不想引入 Microsoft.VisualBasic.dll (別問為什麼, 純屬個人偏好) 又想要做到相同的效果, 做法也很簡單, 請參考以下的範例程式碼!!!

public static class ChineseStringUtility
{
    internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
    internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
    internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;

    [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
    internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);

    public static string ToSimplified(string source)
    {
        String target = new String(' ', source.Length);
        int ret = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, source, source.Length, target, source.Length);
        return target;
    }

    public static string ToTraditional(string source)
    {
        String target = new String(' ', source.Length);
        int ret = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, source, source.Length, target, source.Length);
        return target;
    }
}




2011年12月28日 星期三

[IIS].AspScriptFileCacheSize 在記憶體裡快取asp檔案

IIS 裡有一個設定, 透過增加快取的 asp, 讓程式在執行時, 可以快一點被執行完.

透過 GUI 設定方式如下:
-------------------------
1. Open the IIS MMC.
2. Right-click Web Sites, then click Properties.
3. On the Home Directory tab, click Configuration.
4. On the Cache Options tab, select Cache all requested ASP files.
5. Type a new value for ASP files cached in memory and click OK.
6. Click the Cache Options tab. Note that the value in the ASP files cached in memory text box is 999999.




透過指令的設定方式如下:
-------------------------
1. Open a command prompt.
2. Type cd inetpub\adminscripts.
3. Type adsutil set w3svc/AspScriptFileCacheSize "1-999999".


理論上, asp 程式碼的個數小於500支的話, 就用預設值就ok了, 預設好像是快取500支程式檔案.




資料來源:
-------------------------
BUG: Cannot Modify the Maximum Number of ASP Files Cached in Memory with the IIS MMC
http://support.microsoft.com/kb/308182/en-us

AspScriptFileCacheSize
http://msdn.microsoft.com/en-us/library/ms525870(v=vs.90).aspx

AspScriptFileCacheSize Metabase Property (IIS 6.0)
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0596baf9-41c7-4459-bbc0-0c5d5d9fbd8b.mspx?mfr=true

jQuery 教學 - 基礎篇

資料來源:
----------------------------------------------
http://jsgears.com/thread-63-1-1.html



簡介:
----------------------------------------------
jQuery 是一套 JavaScript 的 Library,因此,你必須稍具 JavaScript 的基礎,jQuery 主要是用在 DOM 文件的操作,包含「快速選取元素(Element)」並且「做一些事情」,快速選取元素可以讓你一次選取單一或多個的元素,然後你可以將這些被選取的元素做一些改變,例如隱藏、顯示等等。此外 jQuery 的核心程式還加強了非同步傳輸(AJAX)以及事件(Event)的功能。



快速選取元素:
----------------------------------------------
jQuery 怎麼用來「快速選取元素」並且「做一些事情」呢?請看看程式碼:
$("div").addClass("special");

錢記號 $ 是 jQuery 的物件,使用 $("div") 就是用 jQuery 來選取元素,這個範例可以選取文件內所有的 <div> 元素。後面接著的 .addClass("special") 就是用來做一些事情,這個範例是將先前所選取到的所有元素都加上一個名為 "special" 的 class。也就是透過 $("div").addClass("special") 的語法,可以讓你一次幫文件上有的 <div> 元素都加入 special 的 class。



做一些事情:
----------------------------------------------
使用 jQuery 來選取元素之後,接下來當然就是要來對這些選取到的元素做些改變囉。透過 jQuery 內建的函數,你可以:

1.對 DOM 進行操作,例如對文件節點的新增或修改
2.添加事件處理
3.做一些基本的視覺效果,例如隱藏、顯示、下拉顯示、淡出淡入等等
4.使用 AJAX 傳送表單內容或取得遠端文件



[範例] 選取所有有 target 屬性的 <a>,並且在其節點下加入一段文字。
$("a[target]").append(" (Opens in New Window)");
這是一段原始的 HTML :
<a href="http://jsgears.com">jsGears</a>
<a href="http://google.com" target="_blank">Google</a>
<a href="http://amazon.com" target="_blank">Amazon</a>
選取有 target 屬性並加入文字後的結果:
<a href="http://jsgears.com">jsGears</a>
<a href="http://google.com" target="_blank">Google (Opens in New Window)</a>
<a href="http://amazon.com" target="_blank">Amazon (Opens in New Window)</a>



連續地使用函數(Chaining):
----------------------------------------------
jQuery 很重要的一個特性是可以連續地使用函數(Chaining),當你選取了一個或一組的元素後,可以連續對這些元素進行多個處理。以下範例會將所有的 <div> 隱藏,修改文字顏色為藍色,再將 <div> 以下拉布幕的效果顯示出來:
$("div").hide();
$("div").css("color", "blue");
$("div").slideDown();
這樣的三行程式碼可以用以下一行的程式碼取代,結果會是完全相同的:
$("div").hide().css("color", "blue").slideDown();




相關的教學文章:
----------------------------------------------
jQuery 學習筆記
網址:http://blog.ericsk.org/archives/tag/jquery-tut
作者:ericsk
部落格:國二學生認真打雜

自製 jQuery Plugin
網址:http://www.jaceju.net/blog/?p=336 (Part 1)
http://www.jaceju.net/blog/?p=337 (Part 2)
作者:jace ju
部落格:網站製作學習誌

jQuery 手冊- 選擇器(Selectors 1.2)
網址:http://jquery.shian.tw/selectors.php
作者:遨遊飛翔
部落格:遨遊飛翔

邊做邊學 jQuery 系列 (有圖有文有影片、適合 ASP.NET 的開發者)
網址:http://msdn.microsoft.com/zh-tw/asp.net/dd446623.aspx
作者:Jeffrey
部落格:黑暗執行緒



相關的範例下載:
----------------------------------------------
http://jsgears.com/tag.php?name=jQuery


官方網站:
----------------------------------------------
http://jquery.com/

2011年12月22日 星期四

IIS Logs 分析工具 - indihiang

官方網站:
http://indihiang.codeplex.com/

How to use(使用方法):
http://wiki.indihiang.com/default.aspx?AspxAutoDetectCookieSupport=1

執行畫面:


source code 下載:
http://indihiang.codeplex.com/SourceControl/list/changesets


建議開啟下列的3個欄位, 以便可以分析到更多的資訊:



相關文章:
------------------------------------------------
介紹好用工具:Visual Log Parser ( 視覺化操作 LP 語法 )
http://blog.miniasp.com/post/2009/02/Useful-tool-Visual-Log-Parser.aspx

visuallogparser:
http://visuallogparser.codeplex.com/

Log Parser-記錄檔分析器:
http://www.weithenn.org/cgi-bin/wiki.pl?Log_Parser-%E8%A8%98%E9%8C%84%E6%AA%94%E5%88%86%E6%9E%90%E5%99%A8

Log Parser 2.2:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24659

2011年12月20日 星期二

[Asp].Randomize 對亂數產生器做初始化的動作

當使用者上傳檔案到主機上時,通常會依亂數重新命名, 但為了避免同一個時間點(同一分同一秒)有人同時傳檔案, 程式同時被呼叫, 產生出一樣的檔案, 所以會使用 rnd() 取亂數指令,
但...如果沒有Randomize做初始化亂數產生器,每次更新後產生的數字都會一樣.


沒有下的話, 如下圖, 最後幾碼都一樣, 因為 rnd() 進亂數表的進入點是相同的.



多下一行 Randomize
就有立竿見影的功效, 檔名的後幾碼就不再固定是 02867.



道理很簡單, 奇怪的是大家滿容易乎略, 覺得電腦預設應該就要是 randomized 過.

[SQL].stored procedure 拒絕 EXECUTE 權限

重新安裝系統, db user 只開放 data_reader + data_writer 權限, 所以一執行 stored procedure 就掛掉, 錯誤訊息如下:
--------------------------
結構描述 'dbo',資料庫 'myDatabase',物件 'sp_myStoredProcedure' 拒絕 EXECUTE 權限。


(方案1) 懶人解決辦法:
--------------------------
1. 建立新的 Role. (例如: myDbUserRole)
2. 設定 myDbUserRole 是某一個 database 的 dbo.
3. 設定登入的 userid 屬於該 role.


(方案2) 比較花時間的建議的解決辦法:
--------------------------
1. 建立新的 Role. (例如: myDbUserRole)
2. 設定 myDbUserRole 是某一個 database 的 dbreader + dbwriter.
3. 針對要允許的 物件 開放應該給予的權限, 可能需要設定的物件分別有:
3.1 stored procedure
3.2 function
3.3 view

權限給太多 = 出事時資料會被偷走, 或系統會有被hack 風險.
權限給太少 = 程式三不五十會出錯, 因為權限不夠...


結論:
--------------------------
如果您的系統略重要, 或會被外部的複雜的 internet access, 請使用方案2.
應急(或偷懶)的話請使用方案1.



相關文章:
--------------------------
google search: GRANT EXECUTE ON sp_columns

create role:
http://65.55.20.225/zh-tw/library/ms187936.aspx

資料庫層級角色:
http://65.55.20.225/zh-tw/library/ms189121.aspx

認識 資料庫層級角色(Database Role)
http://maxtellyou.blogspot.com/2011/12/database-role.html

2011年12月19日 星期一

程式可以存取使用實體檔案時,應避免使用http去取得檔案

程式可以存取使用實體檔案時,應避免使用http去取得檔案,
因為透過http 需要花費更多的記憶體 + CPU時間 + 工作項目 + IIS log.

例如某一行指令:
LoadXMLurl = myHttpURL & "/configFolder/Settings.xml"


建議修改成:
LoadXMLurl = server.mappath("/configFolder") & "\Settings.xml"

[Asp].queryString 阻擋單引號比較好的解法

假設您有2道關卡, 來阻擋 hacker 的 sql injection,
第1道關卡: 寫在所有的 include 檔的第1行裡, 固定會執行.
第2道關卡: 寫在,每一個 request 指令之後, 用來判斷接收到的變數內容的正確及合法性.

* 附註: 聽說攻擊的方式, 不只有用單引號, 所以其實第1道關卡不是必須的, 但一定要在每一程式寫好第2道關卡進行檢查.


由於在 querystring 裡, %27 與 ' (單引號) 是不同的, 但直接擋掉 %27 感覺又怪怪的, 不知道會不會擋到不知名的中文字. 所以之前寫:
if instr(request.querystring(),"%27") > 0 then
...
end if


置換成:
if isQueryStringContainQuota() then
...
end if



'// purpose: check is querystring Contains quota.
'// ex: ret = isQueryStringContantQuota()
'// return:
' True: Found!
' False: not Found.
function isQueryStringContainQuota()
dim returnValue
returnValue = not True '// default: not found.

dim strSingleQuota
strSingleQuota = "'"

dim qItem
for each qItem in request.querystring
if instr(trim("" & request.querystring(qItem)),strSingleQuota) > 0 then
returnValue = True
exit for
end if
next

isQueryStringContainQuota = returnValue
end function

robots.txt 攔截所有的機器人的設定值

資料來源: http://zh.wikipedia.org/wiki/Robots.txt

直接設成下面這2行, 禁止所有 spider 或 crawl 來存取您的網站,
通常管理介面, 不希望他們來 趴, 免得程式沒寫好被發理:
--------------------
User-agent: *
Disallow: /




* 附註: 通常管理用的後台, 不需要進 search engine 裡...

2011年12月15日 星期四

違反_PRIMARY_KEY_條件約束_'PK_iCount'。無法在物件_'dbo.iCount'_中插入重複的索引鍵。

在 IIS 的 log 裡看到, 500 Error,
出錯的程式碼片斷, 是在處理 "點閱率",
點閱率 (iCount) table 的定義是: (docID, date, counter)

三不五十會有人重覆插入, 造成 Error, trace source code, 發現, 同一時間, 2個人去 select database 的確可能都還沒有被 insert data 進去, 但2個人一起去 insert 就會出錯.

由於不是很重要的資料, 所以, 加一個 on error resume next 的指令, 到 insert command 前, 讓程式不要產生 500 error 就先交差了. 之後再找時間來想其他辦法.

避免在排程(tasks)的地方使用管理者帳號執行

排程很方便, 有時候可以解化掉程式的流程, 我猜應該避免在排程的地方使用管理者帳號執行, 假設有心人者知道伺服器主機固定會執行某一支的 .vbs (或 .bat 或 .exe) 檔案, 並透過漏洞(http 或 ftp 之類) 上傳檔案到該目錄下, 伺服器主機可能會有被提升權限的風險.


排程設定的畫面:

* 附註: 這個 "執行身分" 用的帳號, 最好權限設定的超小, 最好是在 Guests group 而不是 User group 裡.


排程被執行後, 在系統的日誌裡, 可以看到該帳號通過驗證做登入.



相關文章: [IIS].關於 IUSER 帳號的相關設定
http://maxtellyou.blogspot.com/2011/12/iis-iuser.html

2011年12月14日 星期三

認識 資料庫層級角色(Database Role)

理論上, 一般的操作(select/insert/update/delete),似乎開 reader + writer 就ok了, 需要開到 db_owner, 可以避免萬一被 SQL Inject 後, 最糟的情況是 data 的部份被刪除和被偷走...



資料庫層級角色名稱+說明:
-----------------------------
db_owner 固定資料庫角色的成員可以在資料庫上執行所有的組態和維護活動,也可以卸除資料庫。
db_securityadmin 固定資料庫角色的成員可以修改角色成員資格及管理權限。將主體加入這個角色可能會產生不必要的權限擴大。
db_accessadmin 固定資料庫角色的成員可以針對 Windows 登入、Windows 群組及 SQL Server 登入加入或移除資料庫的存取權。
db_backupoperator 固定資料庫角色的成員可以備份資料庫。
db_ddladmin 固定資料庫角色的成員可在資料庫中執行任何「資料定義語言」(DDL) 的命令。
db_datawriter 固定資料庫角色的成員可以加入、刪除或變更所有使用者資料表中的資料。
db_datareader 固定資料庫角色的成員可以從所有使用者資料表讀取所有資料。


資料來源: 資料庫層級角色
http://msdn.microsoft.com/zh-tw/library/ms189121.aspx

認識 .NET Framework 4.0 Client Profile

今天在發佈寫的 exe 檔時, 發現有
(1).NET Framework 4.0 Client Profile 和
(2).NET Framework 4.0

這2個可以選, 原來 Client Profile, 指的是比較小包的版本,
不包含下列4個完整版才提供的功能:

(1) ASP.NET
(2) 進階 Windows Communication Foundation (WCF) 功能
(3) NET Framework Data Provider for Oracle
(4) 編譯用 MSBuild


附註: 沒有用到 3.0 , 3.5, 或 4.0之後的新功能, 似乎用 .NET Framework 2.0 來發佈, 相容性應該會比較好.




The .NET Framework 4 Client Profile 包含下列功能:
Common Language Runtime (CLR)
ClickOnce
Windows Forms
Windows Presentation Foundation (WPF)
Windows Communication Foundation (WCF)
Entity Framework
Windows Workflow Foundation
語音
XSLT 支援
LINQ to SQL
Entity Framework 與 WCF Data Services 執行期設計函式庫。
Managed Extensibility Framework (MEF)
動態型別。
並列程式設計功能,例如 Task Parallel Library (TPL), Parallel LINQ (PLINQ), and Coordination Data Structures (CDS)
除錯用戶端應用程式。


資料來源:
http://www.dotblogs.com.tw/regionbbs/archive/2010/03/25/vs2010.net.4.client.profile.aspx

[IIS].關於 IUSER 帳號的相關設定


如果您的案子, 不是使用 IUSER 而是自行定義的 USER account,
請記得把這個 User 做以下的設定:

1. user 的群組, 請移掉 User group, 加入 guests group.
2. 不允許 遠端登入.
3. 不允許 登入伺服器.


設好帳號之後, 有4個地方可能會需對這個帳號做設定:
1.資料夾(實體檔案)的 "安全性" 設定.
2.IIS 站台.
3.IIS application pool.
4.元件. (參考下圖).


2011年12月13日 星期二

[c#].透過 Get Http Header 執行 web app 的排程

公司同事建議不要使用 wget(或 tinyGet) 來執行某一個 URL 來排程, 我發現, 只需要觸發 HEAD, 該 URL 的程式就會被執行, 所以不需要使用到 wget.


用 c# 寫, 程式碼居然, 只有短短 2行就寫完, 呵呵呵, 真方便:
-----------------------------------------
WebRequest request = WebRequest.Create("http://www.yourdomain.com/");
request.GetResponse();


source code download:
-----------------------------------------
http://max-free-app.googlecode.com/files/MaxGetHttpHeader.zip


檔案說明:
-----------------------------------------
MaxGetHttpHeader.exe 取得 http URL header.

* PS: 執行時需要安裝 .net 2.0



相關文章:
-----------------------------------------
資料來源1: 如何使用 WebRequest 類別傳送資料
http://msdn.microsoft.com/zh-tw/library/debx8sh9(v=vs.80).aspx#Y3000

資料來源2: Get HTTP header
http://www.jonasjohn.de/snippets/csharp/get-http-header.htm

資料來源3: HTTPGet.cs | C# .NET 2.0 HTTP GET Class
http://www.goldb.org/httpgetcsharp.html

資料來源4: 如何:使用 C# .NET 進行 GET 要求
http://support.microsoft.com/kb/307023

資料來源5: TechEd 2008 補充: 使用 Tinyget + Logparser 進行網站程式自動測試
http://blogs.msdn.com/b/roberthu/archive/2008/09/30/teched-2008-tinyget-logparser.aspx


* 附註: 我個人是覺得 tinyGet 應該沒問題, 只是自己寫的 GetHttpHeader 可能會更好, 呵呵呵~

2011年12月12日 星期一

button tag 與 input tag 的 type=button

今天在看 IIS 發現很多的 500 Error, 怕系統被滲透, 所以緊張地按照 log 裡 user 操作的方式, 看看怎麼操作會發生 Error, 結果是因為 chrome browser 在處理完 button tag 後, 會比照 submit tag 一樣, 做 submit, 如果被 submit 的那支程式有寫沒好, 沒有檢查欄位內容, 就會出錯.


之前與別的同事共同開發系統, 從來沒用過 button tag, 建議避免使用 button tag:
<button onclick="javascript:document.getElementById('fieldid').value='';">清除</button>

改用 input tag:
<input type="button" onclick="javascript:document.getElementById('fieldid').value='';" value="清除" />

研究 URLRewriter

之前寫過利用 404 status 實作 URLRewriter(短路徑) 的文章:
http://maxtellyou.blogspot.com/2010/05/aspvirtual-directory.html

google 了一下, 似乎有其他不錯的解決辦法,

研究中的文章1: URL rewrite with asp.net 4.0 and IIS7
http://www.jphellemons.nl/post/URL-rewrite-with-aspnet-40-and-IIS7.aspx

研究中的文章2: URL Rewriting in ASP.NET
http://msdn.microsoft.com/en-us/library/ms972974.aspx

2011年12月9日 星期五

每一個 request 都要檢查後, 再放進去 database 裡做操作

建議程式裡的每一個 request 都要檢查後, 再放進去 database 裡做操作,

舉例, case 是畫面上有很多筆資料, 要整批做更新,
假設有一段 SQL command 要執行, 有人是直接醬子寫.

一般正常的操作流程下, 程式不會出問題, 但如果有人亂輸入內容, 程式就會發生 500 Error, 例如 user 輸入 &dir, 由於 Num 欄位和 Seq 欄位都是 int 型別, 所以輸竹了文字的資料, 就會發生錯誤:
將_nvarchar_值_'&dir'_轉換成資料類型_int_時,轉換失敗。


針對這個 case 要降低 500 Error 發生的機率, 請先把 request 到的資料, 放到變數裡, 先經過簡單的前置檢查後, 再把變數的內容放到 sql command 裡來執行, 建議的寫法如下:



我猜 input FORM 裡會輸入的資料, 大致上分成: 數字 和 文字2種,
數字的話, 使用 isNumeric() 應該就可以解決掉大部份的變數內容檢查,
文字的話, 建議先從 database 裡的 column 來限制收到的變數的長度, 最好可以再針對欄位內容做過濾, 像是不允許內容出現 SQL 指令, 和部份 stored procedure 指令.

單引號' 在 querystring() 裡與 %27 是不同的

有用防火牆不一定安全, 因為有些攻擊的方法, 一樣是走 80 port 進來您的系統後, 再做滲透.
使用外部的 filter 來擋 SQL Injection 的單引號, 也不一定安全, 因為 filter 可能沒寫好, 如果寫好, 可能會安全一點點.

最近在看 IIS Log, 有一支 demo-1.asp 程式裡的 id 欄位, 忘了增加前置檢查, 直接去 access databae, 結果..., 現在發現的2個小問題:
1. Site 1 傳回給 user 的 status, 居然是 302, 而不是 200.
2. Site 1 的 filter 功能沒擋成功, 把單引號丟給實際 Access Database 的程式.




架構說明:
-----------------
Site 1 的 demo-1.asp 是在與 User 的 browser 的互動, 裡面沒有寫程式, 單純的做單引號的過濾, 就去呼叫 Site 2 的 demo-2.asp



Site 1 (與User browser 互連的程式) 的 IIS log
---------------------------------
201X-XX-XX 17:03:14 GET /demo-1.asp id=-1%27%20or%20%273%27%3d%273 80 - xxx.xxx.xxx.xxx Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+6.0) 302 0 0


Site 2 (實際程式) 的 IIS log
---------------------------------
201X-XX-XX 17:03:14 GET /demo-2.asp id=-1%27%20or%20%273%27%3d%273&|316|80040e07|將_nvarchar_值_'-1'_or_'3'='3'_轉換成資料類型_int_時,轉換失敗。 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98) 500 0 0



手動地開啟 chrome 在 Site 1 上做測試,
輸入單引號, 有被程式判斷到, 並導回首頁. status=200
---------------------------------
2011-12-09 02:59:41 GET /demo-1.asp id=-1'%20or%20'3'='3 80 - 10.10.x.x Chrome/17.0.963.0 200 0 0


輸入單引號 (%27), 有被程式判斷到, 並導回首頁. status=200
---------------------------------
2011-12-09 03:10:24 GET /demo-1.asp id=1%27%20or%20%273%27 80 - 10.10.x.x Chrome/17.0.963.0 200 0 0


* 附註: 有問題的地方在, 為什麼之前的 IIS 的 log , status=302 而不是 200.


接下來, 我發現 request.querystring() 裡 %27 並不等於 ' (單引號),
測試的程式如下:
if instr(request.querystring(),"'") > 0 then
response.write "querystring found ' sign!"
else
response.write "pass ' sign query string check."
end if

if instr(request.querystring(),"%27") > 0 then
response.write "querystring found %27 sign!"
else
response.write "pass %27 query string check."
end if

URL 裡輸入 id=', 可以被第1個 if 判斷到, 但無法通過第2個 if 判斷.
URL 裡輸入 id=%27, 可以被第2個 if 判斷到, 但無法通過第1個 if 判斷.

* 附註: 如果您是使用 request("id") 的話, 會取得的是 ' 而不是 %27. (合乎常理).


結論1: 關於 querystring 的部份, 建議增加一個 %27 的判斷.

結論2: 如果要在第1關的 filter 裡擋單引號的話, 用 for each 來一個個的把 form 的資料 request 出來後, 再做判斷, 可能會擋的比較確實.

結論3: 每一支程式, 的每一個 request 應該都要詳細檢查要放進去 database 處理的變數是否為乾淨的(沒有被Hacker修改).

2011年12月8日 星期四

[Asp].isNumeric()函數測試

如果您有一個變數, 確定 URL 輸入時, 必需是數字, 可以使用 isNumeric 來做數字的驗證, 降低被 SQL Injection 滲透的機率.

asp code
--------------------------
id = "123"
response.write "(" & id & "): " & isNumeric(id)



執行完的結果如下:
--------------------------
(123): True
(+123): True
(-123): True
(1+23): False
(12-3): False
(1*23): False
(12/3): False
(12\3): False
(&123): True
(&dir): False
($123): False
(0x123): False
(1=23): False
(1=1): False
--------------------------



結論:
確定是數字的變數, 可以多增加一個 isNumeric() 來做前置檢查.
確定是 text 的欄位, 可以多增加一個檢查輸入的句字中, 是不有包含不允許使用的 SQL command.

[IIS].Log 裡的200 0 64(sc-win32-status)

看到 IIS Log 裡大部份都是 200 0 0 , 但有幾筆卻是顯示:
200 0 64, google 了一下, 答案可能是:

sc-status = 200
sc-substatus = 0
sc-win32-status = 64
The error for status 64 is: "The specified network name is no longer available."


sc-win32-status of 64 means "The specified network name is no longer available". It usually occurs when the client reset the connection after getting the last packet rather than doing a graceful close of the connection. In client server architecture after IIS has sent final response to client typically it waits for ACK message form client. Now certain clients instead of sending final ACK back to server, resets the connections which are not and graceful connection close and hence IIS logs “64” in IIS logs. Many clients will reset the connection when they are done with it, to free up the socket instead of leaving it in TIME_WAIT/CLOSE_WAIT. Proxies tend to do it more than others do, hence win 32 status code of 64 should be reviewed only if necessary.


資料來源:
http://column.iresearch.cn/u/lesishu/archives/2008/39752.shtml

Notepad++ RegExp 處理 IIS log

正規表示法(regular expression, RegExp)是一個很方便的工具, 這比較像是 Linux 世界的人在使用的工具, 因為都沒有 GUI. 這次要用 NotePad++ 所附的 RegExp 解決的是, 只看 IIS "確定有" 異常的 log 的部份.


使用步驟:
----------------------
step 1: 用 Notepad++ 開啟 IIS log 檔, 並用 save as... 另存新檔.

step 2: 使用 replace ,
Find: ^201(.*) 200 0 0
Replace as: (不要填)
按下 Replace ALL


附註: 理論上, status = 302 的也可以刪掉, 302 是指「Object Moved」
Find: ^201(.*) 320 0 0


step 3: 全選, 再用 TextFX 裡的 TextFX Edit 裡的 Delete Blank Lines.

OK, 大功告成.



附註:
----------------------
status=200, 並不是不重要, 也不代表程式沒問題,
status=500 指的就是程式確定出問題!



進階應用:
----------------------
假設您的 IIS log 多開了3個欄位(sc-bytes cs-bytes time-taken), 可以試試看下列這幾組:

^20(.*) 200 ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)
^20(.*) 302 ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)
^20(.*) 404 ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)


相關文章:
----------------------
Notepad++ RegExp sample, 幫 request("xxx") 加副程式
http://maxtellyou.blogspot.com/2011/12/notepad-regexp-sample-requestxxx.html


第十二章、正規表示法與文件格式化處理
http://linux.vbird.org/linux_basic/0330regularex.php

Notepad++ RegExp sample, 幫 request("xxx") 加副程式

修改前:
str=request("item")


Notepad++ 裡設定
Fine what: request\("([A-Z0-9_]+)"\)
Replace as: htmlEncode(request("\1"))


Replace 結果:
str=htmlEncode(request("item"))


Notepad++官方說明文章如下:

Notepad++ RegExp List
Note: In case you have the plugins installed, try CONTROL+R or in the Menu Plugins � TextFX Quick - Find/Replace to get a sophisticated dialogue including a drop down for regular expressions and multi line search/replace.
In a regular expression, special characters interpreted are:
.Matches any character
(This marks the start of a region for tagging a match; so what's inside ( ) you can use in "replace with" using \1, \2 etc.
)This marks the end of a tagged region.
\nWhere n is 1 through 9 refers to the first through ninth tagged region when replacing. For example, if the search string was Fred([1-9])XXX and the replace string was Sam\1YYY , when applied to Fred2XXX this would generate Sam2YYY .
\<This matches the start of a word using Scintilla's definitions of words.
\>This matches the end of a word using Scintilla's definition of words.
\xThis allows you to use a character x that would otherwise have a special meaning. For example, \[ would be interpreted as [ and not as the start of a character set.
[...]This indicates a set of characters, for example, [abc] means any of the characters a, b or c. You can also use ranges, for example [a-z] for any lower case character.
[^...]The complement of the characters in the set. For example, [^A-Za-z] means any character except an alphabetic character.
^This matches the start of a line (unless used inside a set, see above).
$This matches the end of a line.
*This matches 0 or more times. For example, Sa*m matches Sm , Sam , Saam , Saaam and so on.
+This matches 1 or more times. For example, Sa+m matches Sam , Saam , Saaam and so on.

Source of this information is the Scintilla edit component help, but it was adapted to Notepad++ behaviour.
Notepad++ RegExp Examples
Important
  • You have to check the box "regular expression" in search & replace dialog
  • When copying the strings out of here, pay close attention not to have additional spaces in front of them! Then the RegExp will not work!
You use a MediaWiki (e.g. WikipediaWikitravel) and want to make all headings one "level higher", so a H2 becomes a H1 etc.
  1. Search ^=(=)
    Replace with \1
    Click "Replace all" to find all headings2...9 (two equal sign characters are required) which begin at line beginning (^) and to replace the two equal sign characters by only the last of the two, so eleminating one and having one remaining.
  2. Search =(=)$
    Replace with \1
    Click "Replace all" to find all headings2...9 (two equal sign characters are required) which end at line ending ($) and to replace the two equal sign characters by only the last of the two, so eleminating one and having one remaining.
  3. == title == became = title =, you're done :-)
You have a document with a lot of dates, which are in German date format (dd.mm.yy) and you'd like to transform them to sortable format (yy-mm-dd). Don't be afraid by the length of the search term – it's long, but consiting of pretty easy and short parts.
  1. Search ([^0-9])([0123][0-9])\.([01][0-9])\.([0-9][0-9])([^0-9])
    Replace with \1\4-\3-\2\5
    Click "Replace all" to fetch
    • the day, whose first number can only be 0, 1, 2 or 3
    • the month, whose first number can only be 0 or 1
    • but only if the spearator is . and not any charcter ( . versus \. )
    • but only if no numbers are sourrounding the date, as then it might be an IP address instead of a date
    and to write all of this in the opposite order, except for the surroundings. Pay attention: Whatever SEARCH matches will be deleted and only replaced by the stuff in the REPLACE field, thus it is mandtory to have the surroundings in the REPLACE field as well!
  2. 31.12.97 became 97-12-31 and 14.08.05 became 05-08-14 and the IP address 14.13.14.14 did not change, you're done :-)
You have printed in windows a file list using dir /b/s >filelist.txt to the file filelist.txt and want to make local URLs out of them.
  1. Open filelist.txt with Notepad++
  2. Search \\
    Replace with /
    Click "Replace all" to change windows path separator char \  into URL path separator char / 
  3. Search ^(.*)$
    Replace with file:///\1
    Click "Replace all" to add file:/// in the beginning of all lines
  4. Depended on your requirements, preceed to escape some characters like space to %20 etc.
  5. C:\!\aktuell.csv became file:///C:/!/aktuell.csv, you're done :-)
Another Search Replace Example
[Data]
EU AX ALA 248 �land Islands
EU AL ALB 008 Albania, People's Socialist Republic of
AF DZ DZA 012 Algeria, People's Democratic Republic of
OC AS ASM 016 American Samoa
EU AD AND 020 Andorra, Principality of
AF AO AGO 024 Angola, Republic of
NA AI AIA 660 Anguilla
AN AQ ATA 010 Antarctica (the territory South of 60 deg S)
NA AG ATG 028 Antigua and Barbuda
SA AR ARG 032 Argentina, Argentine Republic
AS AM ARM 051 Armenia
NA AW ABW 533 Aruba
OC AU AUS 036 Australia, Commonwealth of
[SearchPattern]
([A-Z]+) ([A-Z]+) ([A-Z]+) ([0-9]+) (.*)
[ReplacePattern]
\1,\2,\3,\4,\5
[FinalData]
AS,AF,AFG,004,Afghanistan
EU,AX,ALA,248,�land Islands
EU,AL,ALB,008,Albania, People's Socialist Republic of
AF,DZ,DZA,012,Algeria, People's Democratic Republic of
OC,AS,ASM,016,American Samoa
EU,AD,AND,020,Andorra, Principality of
AF,AO,AGO,024,Angola, Republic of
NA,AI,AIA,660,Anguilla
AN,AQ,ATA,010,Antarctica (the territory South of 60 deg S)
NA,AG,ATG,028,Antigua and Barbuda
SA,AR,ARG,032,Argentina, Argentine Republic
AS,AM,ARM,051,Armenia
NA,AW,ABW,533,Aruba
OC,AU,AUS,036,Australia, Commonwealth of

2011年12月7日 星期三

DB 與 Web 是同一台主機時,建議DB使用 192.168.X.X 段的 IP address

DB 與 Web 是同一台主機時,建議DB使用 192.168.X.X 段的 IP address,
因為, 萬一遇到問題, 要 trace log 時, 會比較方便, 才不會看到一大堆的 127.0.0.1

如果, 確定該台Web主機, 不會連到別台的 database,
記得用 ipsec 把連外的 1433 擋掉, 免得打掛別人的主機. @_@;

建議, 該Web主機直接把連外的 80, 443 port 直接全擋掉, 等有要做 windows update 時, 再開通, 其他建議順便一併擋掉的連外 port 有: 7, 20, 21, 23, 135, 137, 138, 139, 445.

認識 RestrictAnonymous (限制匿名檢查)

資料來源1: 安全性狀態評估檢查 - 限制匿名檢查
http://technet.microsoft.com/zh-tw/library/bb418944.aspx

資料來源2: 如何使用 Windows 2000 中的 RestrictAnonymous 登錄值
http://support.microsoft.com/kb/246261/zh-tw

登錄設定位於下列位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\RestrictAnonymous

不用想太多, 直接把這個值, 設成1 即可.


RestrictAnonymous 可設為下列任一值:
0 - 無。視預設權限而定。
1 - 不允許「安全性帳戶管理員」帳戶和名稱的列舉。
2 - 無不含明確匿名權限的存取權。

2011年12月6日 星期二

[ASP].achg.asp 在 \Windows\system32\inetsrv\iisadmpwd

這個資料夾下的程式, 是 M$ 工程式貼心地幫我們寫的, 更新 Windows 登入的帳號/密碼 用的管理工具, 可是誰會用網頁來修改帳/密. @_@;

結論: 灌好 IIS 後, 記得要去刪掉, 應該有選項, 在安裝時不要安裝這類的奇怪貼心駭客小工具.

要監控主機的話, 可以試試看: Zabbix
雲端備份主機資料: Acronis Remote Agent, 資享科技旗下的資料保全銀行雲端備份軟體, Zmanda Cloud Backup, backupify.

2011年12月2日 星期五

ipseccmd 的範例

● 我的範例
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
需求,1433 port 和網芳只開放給 10.10.9.x 和 10.10.46.x

rem --------------------------------
rem Limit MS Sql Server
rem --------------------------------
ipseccmd -w REG -p "Block 1433 ports" -y
ipseccmd -w REG -p "Block 1433 ports" -o
ipseccmd -w REG -p "Block 1433 ports" -r "Block TCP/1433" -f *+0:1433:TCP -n BLOCK
ipseccmd -w REG -p "Block 1433 ports" -r "Limit TCP/1433" -f 10.10.9.0/255.255.255.0+0:1433:TCP -n PASS
ipseccmd -w REG -p "Block 1433 ports" -r "Limit TCP/1433" -f 10.10.46.0/255.255.255.0+0:1433:TCP -n PASS
ipseccmd -w REG -p "Block 1433 ports" -x


rem --------------------------------
rem Limit UDP port 137 (NETBIOS-NS):
rem Limit UDP port 138 (NETBIOS-DGM):
rem Limit TCP port 139 (NETBIOS-SSN)
rem Limit TCP port 445 (MICROSOFT-DS)
rem --------------------------------
ipseccmd -w REG -p "Block NETBIOS ports" -y
ipseccmd -w REG -p "Block NETBIOS ports" -o
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit UDP/137" -f 10.10.9.0/255.255.255.0+0:137:UDP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit UDP/137" -f 10.10.46.0/255.255.255.0+0:137:UDP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Block UDP/137" -f *+0:137:UDP -n BLOCK
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit UDP/138" -f 10.10.9.0/255.255.255.0+0:138:UDP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit UDP/138" -f 10.10.46.0/255.255.255.0+0:138:UDP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Block UDP/138" -f *+0:138:UDP -n BLOCK
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit TCP/139" -f 10.10.9.0/255.255.255.0+0:139:TCP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit TCP/139" -f 10.10.46.0/255.255.255.0+0:139:TCP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Block TCP/139" -f *+0:139:TCP -n BLOCK
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit TCP/445" -f 10.10.9.0/255.255.255.0+0:445:TCP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Limit TCP/445" -f 10.10.46.0/255.255.255.0+0:445:TCP -n PASS
ipseccmd -w REG -p "Block NETBIOS ports" -r "Block TCP/445" -f *+0:445:TCP -n BLOCK
ipseccmd -w REG -p "Block NETBIOS ports" -x



 ● GUI 介面設定
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 step 1.從 [開始] 選單,先依序指向 [所有程式] 和 [ 系統管理工具],然後選取 [本機安全性設定值]。
 step 2.在 [本機安全性設定] 對話方塊中,按一下 [在本機電腦的 IP 安全性原則]。右邊的窗格會顯示預設的 Windows Server 2003 原則。
 step 3.在右邊的窗格上按一下滑鼠右鍵,然後按一下 [管理 IP 篩選器清單和篩選器動作]。
 step 4.於 [管理 IP 篩選器清單和篩選器動作] 對話方塊中,在 [管理 IP 篩選器清單] 索引標籤上,按一下 [新增]。
 step 5.在 [IP 篩選器清單] 對話方塊中的 [名稱] 方塊內,輸入您的篩選器清單名稱 (例如:輸入 HTTP)。若您想要的話,也可輸入相關的描述。此為套用到所有的輸入 HTTP 連線的篩選器清單。
 step 6.按一下 [新增]。出現 [IP 篩選器精靈]。建立篩選器清單...



 ● 相關文章:
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ipsec 相關工具與指令研究
 http://maxtellyou.blogspot.com/2011/11/ipsec.html

 ipseccmd 範例
 http://forum.slime.com.tw/thread88684.html

2011年12月1日 星期四

SQL Server 的安全的建議

1.先用 ipsec 把所有的人(本機以外)的 1433 port 封包都擋掉, 針對有要 access 的, 再各別加入.
2.access 前台的 account, 請勿使用有dbowner 權限的帳號, 只要reader 即可, 再針前台的 ap 要 insert 的 table 開啟有要寫入的 table 權限.
3.sql server 上, 部分沒有在使用的系統 stored procedure 應停用或刪除...

利用gpedit 禁止目錄執行exe,bat,com

1. 執行: gpedit.msc



2. 新增, 軟體 的安全性原則:



3. 選取路徑, 並設為不允許.



4. 設好 "登出" 或重開機後, 到 Temp 下執行 notepad2.exe 就會顯示錯誤訊息.


建議: web root, 或程式上傳用的資料夾(public), 要記得設成不允許執行, 這樣子即可大大提高系統的安全性.





如何建立路徑規則:
--------------------------
1.按一下 [開始],再按一下 [執行],輸入 mmc,然後按一下 [確定]。
2.開啟 [軟體限制原則]。
3.在主控台樹狀目錄或詳細資料窗格中,用滑鼠右鍵按一下 [其他原則],然後按一下 [新增路徑規則]。
4.在 [路徑] 方塊中輸入路徑,或按一下 [瀏覽] 以尋找檔案或資料夾。
5.在 [安全性等級] 方塊中,按一下 [不允許] 或 [沒有限制]。


注意:
--------------------------
如果您尚未為這個 GPO 建立新的軟體限制原則設定,可能必須執行這項操作。
如果您為安全性等級設為 [不允許] 的程式建立路徑規則,則使用者仍然可以藉由將軟體複製到其他位置的方式執行軟體。
路徑規則支援的萬用字元為星號 (*) 和問號 (?)。
您可以在路徑規則中使用環境變數,例如 %programfiles% 或 %systemroot%。
當您不知道軟體在電腦中的儲存位置,但知道軟體的登錄機碼時,如果要為軟體建立路徑規則,您可以建立登錄路徑規則。
如果要防止使用者執行電子郵件附件,您可以為郵件程式的附件資料夾建立路徑規則,以防止使用者執行電子郵件附件。
只有列在 [指定的檔案類型] 中的檔案類型,才會受到路徑規則的影響。有一份所有規則共用的指定檔案類型清單。
如果要讓軟體限制原則生效,使用者必須先登出再登入電腦,以更新原則設定。
當有一個以上的規則套用至原則設定時,處理衝突時便有規則的優先順序。


資料來源: 如何在 Windows Server 2003 中使用軟體限制原則
http://support.microsoft.com/kb/324036/zh-tw

2011年11月30日 星期三

[NET].免費限速軟體 NEGiES 1.57(中文繁體)

(日文)官方網站: http://hp.vector.co.jp/authors/VA036210/download1.html
軟體下載: http://www.mediafire.com/?oiogmziy5n2

通常 browser 都沒有限速的功能, 由於現在要寫檔案上傳的功能, 需要做測試, 區網(或本機) 的傳輸速度太快, 會看不到進度bar(progress bar). 所以必需使用限速軟體.


(中文版)設定的範例:



(日文版)設定的範例:


相關文章1: http://save-coco.blogspot.com/2009/01/negies-157_6710.html

相關文章2: http://freesoft.tw/?p=1471

2011年11月29日 星期二

[HTML].flash 上傳元件的限制

前言:
最近在開發一個 HTML 上傳檔案的 form, 類似 gmail 的界面, 可以在同一個畫面裡, 透過 flash 上傳多筆的附件檔案.

這次的遇到的問題是, 我在畫面中使用了2個 swfupload 物件, 一個要上傳附件, 一個要上傳多媒體檔案, 上傳多媒體檔案時, 無法讓檔案上傳, 可是上傳附件的部份都ok.


* 附註:上傳多媒體檔案的方式是透過 jQuery 的 blockUI plugin 彈出一個 dialog:

說明: 這個彈出的方式, 比較特別, 是先選取檔案, 等使用者按下 "上傳"按鈕, 才開始上傳資料.


debug swfupload 的 message 如下:




假設, 是因為放了2個 swfupload object 造成的沖衝. 我的除錯流程如下:
挑戰解法 1, 增加一個新的區塊, 把這種"確定後才開始上傳" 的範例用的程式都放到新的區塊. 測試結果, 是ok的. 測試的範例, 可以2段式的, 按下確定後, 才開始上傳.

挑戰解法 2. 移掉 附件在用的 swfupload object, 讓畫面只剩下 上傳多媒體用的 swfupload object, 結果,還是不能 work.

所以, 這一個假設, 應該不成立, 於是比較看看目前的顯示方式, 與"確定後才開始上傳" 的範例的差異, 假設要存取 user client 端的資料時, swfupload 必需是 visible(也許看的到), 結果可行, 似乎是安全性造成的.

結果: flash 上傳元件的限制, 就是 user 要開始上傳 client 端資料時的一瞬間, swfupload object 需要要顯示在畫面裡可能被看的見的區塊裡, 用 "一瞬間" 的意思指, 原本隱藏的區塊, 在 "選取" 檔案時, 和 "開始上傳時" 這2個時間點, 都顯示在畫面上, 是可以上傳成功的.


* 附註: 當 user 選好 client 端的檔案後, "可能" 不能對這一個 flash object 做搬移區塊的動作. 搬了的話會造成 flash UI 的重新整理, 也會造成無法上傳檔案. 會用 "可能", 是指我的手法可能太遜, 搬失敗, 可能有其他的方法, 可以正常地去搬移 flash object 的位置, 而且還可以正常的上傳, 這個部份先跳過...



相關文章:
swfupload Document:
http://demo.swfupload.org/Documentation/#startUpload

swfupload project:
http://code.google.com/p/swfupload/

後記: 原來是 blockUI 裡的 bindEvents, 把事件吃掉..., 我最後的解法是 bindEvents: false, 然後再把 flash 放在一個奇怪的 position:absolute;z-index:9999; left:-100px; top:-50px; 的 layer 裡, 應該可以有更好的解法 XD

2011年11月24日 星期四

JQuery 背景變暗dialog example

新版本的 jQuery 有提供 .dialog(),參考看看.
http://jqueryui.com/demos/dialog/
or
http://docs.jquery.com/UI/API/1.7.2/Dialog
or
http://hi.baidu.com/li_mingzhu/blog/item/1279308d319a0ea60e2444fd.html

另一個不錯的解決方案是使用 blockUI:
http://www.malsup.com/jquery/block/
or
http://jsgears.com/thread-72-1-2.html

blockUI 用起來真的很方便,參數:
showOverlay: false , 就是指,modalless, 背景不會被 lock 住.
showOverlay: true , 就是指,modal, 背景會 lock 住.


google keyword: jquery blockUI, 這個似乎比較好用.

主機移機(或重灌)的check list

公司的主機進行重灌工程, 我有幾個項目沒有做到, 造成... 多花了一些時間進行重新設定, 所以, 把這次裝機的 check list 出來, 希望日後會有幫助:

 ● 重灌前要備份的項目
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 1. Database 備份.
 2. Database 維護計畫 備份..
 3. IIS site + IIS application pool 的 XML file 匯出.
 4. IIS site 的 SSL 憑證匯出.
 5. hosts 檔案備份.
 6. ipsec 的原則匯出.
 7. 防火牆的例外規則.
 8. 排程 \windows\tasks\ 項目備份.
 9. 程式+附件.
 10. 檢查看看, 有沒有一些舊網站在用的外部 app 需要備份.(例如: 自行開發的浮水印app, 或 single site on 之類的 web service)


 ● 重灌後的工作項目
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 1. 建新低權限的 匿名存取用的帳號(IUSER).
 2. 先安裝元件, 並允許新建的 IUSER 有 create owner 權限.
 3. 還原 程式+附件, 並設定 IUSER 有讀取權限, 部份上傳用的資料夾, 有寫入權限.
 4. 還原 Database + 維護計畫.
 5. 匯入 IIS site XML file + IIS application pool.
 6. 匯入 SSL 憑證.
 7. 還原(或修改) host.
 8. 設定防火牆例外規則 + ipsec 原則.
 9. 排程的 job 檔還原回去 \windows\tasks\ , 如果有修改帳號/密碼的話, 記得要重設jobs裡的帳/密.
 10. 還原舊網站在用的外部 app 需要備份.(例如: 自行開發的浮水印app, 或 single site on 之類的 web service)


附註: 上面應該是比較簡單(典型)的主機的備份/還原的流程, 每個案子可能會有些額外的客製化的流程, 例如: SQL Server 的全文檢索的設定, 或 Asp.Net framework 4.0的安裝, 還是 php 或 java 的安裝...etc.

2011年11月23日 星期三

IIS 只能執行"靜態網頁"時的設定方法

系統重灌後, 又卡關了, 這次遇到的是 靜態網頁(.html 或 .xml) 可以執行, 動態網頁(.asp or .aspx) 無法執行, 會傳回 404 - file not found.



google 了 keyword: IIS 6.0 asp 無法執行 html 可以
厲害的 google, 傳了很多資料回來, 研究了幾篇之後, 發現應該是 "網頁服務延伸" 的問題, 果然, 在 IIS 裡, 網頁服務延伸 是空空的, 什麼也沒有.


google 改下 keyword: 網頁服務延伸 asp,
又看了幾篇文章, 挑戰使用 aspnet_regiis –i 指令, 進行重新安裝, 並重新啟動 www service, 結果, 無效.

挑戰自行新增 "網頁服務延伸":



輸入 Asp, 並選取 asp.dll

結果, 新增失敗, 他說該 dll 已被 active server pages 所使用,


挑戰, 使用 aspnet_regiis –ga 試試看, 也無效,
挑戰, aspnet_regiis –c 試試看, 也無效,
最後, 再使用 aspnet_regiis –i 試試看, 結果, 回來重新整理 "網頁服務延伸" 的目錄, 有效, 而且神奇的是他預設就幫 Asp 設成 "已允許"...



資料來源: ASP.NET 4.0 安裝在 IIS6 最常遇到的四個問題
http://blog.miniasp.com/post/2010/06/22/IIS-6-ASPNET-4-Installation-Notes.aspx#continue

附註: 理論上 IIS 的匿名使用者, 用 IUSER 應該就很安全了, 萬一如果您想要自定使用者的話, 請請記得把這個 User 做以下的設定:
1. user 的群組, 請移掉 User group, 加入 guests group.
2. 不允許 遠端登入.
3. 不允許 登入伺服器.

參考 URL: http://maxtellyou.blogspot.com/2011/12/iis-iuser.html

IIS 設定Application Pool 和 新使用者的標準作業流程(SOP)

開Asp網頁的IIS主機重灌, 其實重灌前, 我就有發現 c:\windows\temp\ 的資料夾裡, 被放了奇怪跳板程式, 8成是這台主機的權限之前沒設好, 所以這次用比較高的安全性的設定方式來設定 IIS, 結果一設下去, 就出現:
Service Unavailable 的錯誤.

連直接執行 html file, 都出現 Service Unavailable 的錯誤訊息, 錯誤發生的原因是, 修改 IIS 中應用程式集區(Application Pool)的身份識別, 如果設回去使用 網路服務(NETWORK SERVICE), 網頁就又可以正常執行, 但會彈出安全性的登入框, 因為 test.html 檔案, 網路服務(NETWORK SERVICE)帳號目前沒有存取的權限.


修改 Application Pool 的步驟是,
1.先在系統中新增一位新的使用者 (假設叫做 webUser )
2.修改 IIS 中應用程式集的身份識別設定 (如下圖)





如果在事件檢視器中查詢錯誤紀錄,你就會發現是 Application Pool 發生錯誤, 造成 Service Unavailable.



下就是正確設定的標準作業流程(SOP):
1.新增使用者
2.將該使用者加入 IIS_WPG 群組
3.修改系統暫存目錄 ( C:\WINDOWS\Temp ) 權限, 為特殊權限, 只需要和 NETWORK SERVICE 的設定值一樣,只要有「列出資料夾/讀取資料」與「刪除」兩種權限就可以正常運行 ASP.NET 了。


檢視/設定使用者詳細權限(進階安全性設定)的方法如下:
1.按右鍵, 設定安全性.
2.按 "進階" 按鈕.
3.選 webUser(新增的使用者).
4.按 "編輯" 按鈕.



資料來源: IIS應用程式集區自訂身份識別後如何讓 ASP.NET 正常執行
http://blog.miniasp.com/post/2008/12/ASPNET-and-Application-Pool-Identity-setting-in-IIS-60.aspx

保哥說:
我們都知道 ASP.NET 在 IIS 6.0 中運行的時候,真正的執行權限使用者是應用程式集區(Application Pool)的身份識別(Identity)頁籤中定義的那位使用者,預設的使用者是「網路服務(NETWORK SERVICE)」,而且實際在執行的程序名稱(Process Name)為 w3wp.exe,各位可以從工作管理員中看到。

我們先設定一種情境,如果一台 IIS 中有兩個 ASP.NET 網站,分別由不同的開發團隊或客戶所管理,而兩個網站都有設定檔案上傳的功能,因此兩個網站一定會有特定目錄需要賦予 ASP.NET 可寫入權限,因為在 IIS 中 ASP.NET 的預設權限使用者就等於應用程式集區中定義的身份識別使用者,也就是所謂的 NETWORK SERVICE 系統使用者。

如果當其中第一個網站被入侵或值入後門程式時,也代表著這些後門程式正以 NETWORK SERVICE 的身份在你的主機中肆虐,攻擊的對象即便僅限於「網站」,但當然也包括第二個網站的部分可寫入路徑。

若要增強網站間的安全性與隔離性,我們這時就會需要修改應用程式集區(Application Pool)的身份識別設定,讓兩個 ASP.NET 網站個別使用不同的身份識別來執行所有的程式。


* 附註: IUSER 請使用 guests group 而不是 user group, 以避免權限的問題.

[SQL].資料庫主體在資料庫中擁有 結構描述 且無法卸除。

情況: 有一台主機重灌, 所以備份了 sql server 的 db, 重灌之後, 用 restore 貼回 database, 但原本 db 裡的 userid 不能登入, 也刪不掉, 用指令來刪, 會出現下面的錯誤:
DROP USER [myAccount]



後來, 再多建立一個 dbo 的帳號後, 就可以把舊的, 不能刪除的帳號刪掉, 似乎一個 database , 最少要有一個 dbo 帳號的樣子.

2011年11月21日 星期一

[js].避免 window.onload 被覆蓋,請用 addLoadEvent()

如果, 你的程式使用 window.onload = function()
後面的 javascript 會覆蓋掉前面先使用的人的程式碼.
建議解法, 透過下面的 function 來把您要加入到 onload 裡的程式做append.

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof oldonload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}

Windows 排程指令 SCHTASKS

如果您設排程, 使用指令的方式來下達, 
好處:
1. 移機時也方便把排程帶到別台主機上.
2. 可以動態產生相關的排程工作.


排程工作被產生之後, 會在 c:\Windows\Tasks\ 的隱藏目錄下增加一個 taskname.job
把 taskname.job 複製出來, 就可以拿到別台主機上去使用了, .job 拿到別台主機記得要重新設定一下執行帳號及密碼, 因為可能不太一樣.

--------------------------------------------------

SCHTASKS /parameter [arguments]

描述:
    讓系統管理員能夠在本機或遠端系統上建立、刪除、查詢、
    結束排程工作。取代 AT.exe

--------------------------------------------------

SCHTASKS  /query /fo csv /v > tasklist.csv

描述:
    查詢目前所有的排程, 輸出到文字檔 tasklist.csv。

--------------------------------------------------

SCHTASKS /Create [/S system [/U username [/P [password]]]]
    [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
    [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
    [/RI interval] [ {/ET endtime | /DU duration} [/K] ]
    [/SD startdate] [/ED enddate] [/IT] [/Z] [/F]


描述:
   讓系統管理員可以在本機或遠端系統上建立排程工作。

參數清單:
    /U           username          指定要執行命令的使用者內容。

    /P           password          指定使用者密碼。

    /RU          username          指定要執行工作的使用者
                                   帳戶 (使用者內容)。
                                   系統帳戶的有效值是
                                  "","NT AUTHORITY\SYSTEM" 或
                                   "SYSTEM"。

    /RP          password          指定排程執行頻率。
                                   如果要詢問密碼,參數值必須
                                   設定成 "*" 或不設定。

    /SC          schedule          指定排程執行頻率。
                                   有效的排程類型: MINUTE,HOURLY,
                                   DAILY,WEEKLY,MONTHLY,ONCE,
                                   ONSTART,ONLOGON,ONIDLE。

    /MO          modifier          重新調整排程類型,
                                   來改善週期性的排程控制。
                                   有效值列在下列的 "Modifiers"
                                   區段中。

    /D           days              指定工作執行的日期。
                                   有效值是: MON,TUE,WED,
                                   THU,FRI,SAT,SUN。還有
                                   MONTHLY 排程 1 - 31 (以月份
                                   為主的天數)。

    /M           months            指定排程工作的月份。
                                   預設值是每月的第一天。
                                   有效值是: JAN, FEB, MAR,
                                   APR, MAY, JUN, JUL, AUG, SEP, OCT,
                                   NOV, DEC.

    -i           idletime          指定閒置時間的長短,
                                   過了這個時間就會執行排定的
                                   ONIDLE 工作。
                                   有效範圍是: 1 - 999 分鐘。

    /TN          taskname          指定可以用來識別
                                   這個排程工作的唯一性名稱。

    /TR          taskrun           指定這個排程工作執行
                                   程式的路徑及檔案名稱。
                                 
                                   範例: C:\windows\system32\calc.exe

    /ST          starttime         指定工作的執行時間。
                                   時間格式是 HH:MM (24 小時制)
                                   範例,14:30 代表2:30 PM。

    /SD          startdate         指定工作第一次執行
                                   的日期。格式是 yyyy/mm/dd。
                                   預設成目前的日期。
(這不適用於以下排程類型: ONCE、ONSTART、ONLOGON 和 ONIDLE。)

    /ET          endtime           指定執行工作的結束
                                   時間。時間格式是 HH:MM
                                   (24 小時制) 範例: 14:50 代表下午 2:50。
(這不適用於以下排程類型: ONSTART、 ONLOGON、和 ONIDLE。)

    /ED          enddate           指定工作最後一次執行的日期。
                                   格式是 "yyyy/mm/dd"。

(這不適用於以下排程類型: ONCE、ONSTART、ONLOGON 和 ONIDLE。)

    /Z                             如果不須再次執行工作
                                   請將它刪除。

    /F                             如果指定的工作已經存在,
                                   則強制建立工作
                                   和抑制警告。

    /?                             顯示這個說明訊息。


修飾元: 每個排程類型的/MO 參數有效值:
    MINUTE:  1 - 1439 分鐘。
    HOURLY:  1 - 23 小時。
    DAILY:   1 - 365 天。
    WEEKLY:  1 - 52 週。
    ONCE:    沒有修飾元。
    ONSTART: 沒有修飾元。
    ONLOGON: 沒有修飾元。
    ONIDLE:  沒有修飾元。
    MONTHLY: 1 - 12 或 FIRST,SECOND,THIRD,FOURTH,LAST,LASTDAY。

----------------------------------------
Examples:


Ex: To schedule a task to run every 20 minutes
schtasks /create /sc minute /mo 20 /tn "Security Script" /tr "\"d:\test.bat\" 123" /rU administrator /rP ********

Ex: 每10分鐘執行某一個網址, 用來批次重新計算某些數值.
schtasks /create /sc minute /mo 3 /tn "compute_node_counter" /tr "D:\元件\tinyget.exe -srv:\"www.mysite.com.tw\" -uri:\"/mytask/ws/computeNodeCounter.asp\"" /rU administrator /rP ********

Ex: MyApp 程序在每天的 8:00 A.M. 運行一次。每天運行命令。
schtasks /create /tn "My App" /tr c:\apps\myapp.exe /sc daily /st 08:00:00

Ex: Create a task to run at 11 pm every weekday
SCHTASKS /Create /SC weekly /D MON,TUE,WED,THU,FRI /TN MyDailyBackup /ST 23:00:00 /TR c:\backup.cmd /RU MyDomain\MyLogin /RP MyPassword

Ex: delete a job.
SCHTASKS /Delete /TN "Security Script" /f

----------------------------------------

附註 1: 如果你用的是Win 2003 Server 中文版,daily、weekly、monthly的指令必須轉成中文。

Daily: 每日
Weekly: 每週
Monthly: 每月


例如:
D:\>schtasks /create /sc DAILY /mo 1 /tn "檢查庫存 0200" /tr "checkstock.exe" /rU administrator /rP *********
錯誤: 指定的排程類型不正確。
請輸入 "SCHTASKS /CREATE /?" 來查閱使用方式。

D:\>schtasks /create /sc 每日 /tn "檢查庫存 0200" /tr "checkstock.exe" /st 08:00 /rU administrator /rP ********
成功: 排程工作 "檢查庫存 0200 (2011)" 已成功建立。


附註 2: 有些主機, 使用的 time format 是 hh:mm:ss.

附註 3: 有些主機, 使用的 date format 可能是 mm/dd/yyyy.

附註 4:排程在使用的執行的帳號, 如果重設密碼後, 不知道需不需要回來重設一定排程裡的密碼.(待測)

2011年11月20日 星期日

Windows Server 在資訊安全性上的建議

為了避免公司內部使用中的主機中毒(或被入侵), 被裝了後門(backdoor) 或木馬(Trojan), 或跳板(Proxy), 小弟有幾點建議:

 ● 1. Server主機上都需要安裝防毒軟體, 沒$$的話, 可以暫時用Windows 免費防毒軟體 - Microsoft Security Essentials.

 ● 2. 在遠端登入的地方, 設定增加 Log來記錄, 是誰登入進來. 看看是不是Hacker, 手動連進來, 如果可以的話, 最好還是把 3389 改成別的 Port, 避免在同一個LAN 裡, 有已經中毒的電腦監聽(sniffer) 3389 port.

 ● 3. Administrator 應該定期更換密碼.

 ● 4. 定時使用 Microsoft Baseline Security Analyzer 檢查主機, 是否有系統的設定上或Windows Update上需要加強的地方.

 ● 5. 加裝 Microsoft Port Report + PortReportParser (Log 分析) 監控封包是否有異常, 有機會可以在出事後, 看到攻擊的過程與方法.

 ● 6. 針對各個的主機, 設定 IPSEC 規則, 在內網(intranet的部份) 不要允許 access (連入/連出) 自己單位的主機以外的 IP(和Port), 避免在主機被中毒(或入侵)後對別台主機做攻擊, 而且打掛別人在用的主機.

一般公司都會有外部防火牆來防止駭客直接入侵,應該還需要內部防火牆,來防內賊的,一般無內部防火牆的情況下,只要知道資料庫的IP、帳號及密碼,在內網就能夠去取得資料庫的資料,如果使用IPSec來建立內部防火牆,就能設定IP白名單,僅允許白名單上的伺服器可連接資料庫,也可以減少主機被內部的PC(或NB) 攻破的機率,也可以減少中毒(或被入侵)後對別台主機的影響.

 ● 7. 建議不要使用 c$ ... 的共享.
--------------------------------------------------------
禁止C$、D$ 等管理分享
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
Name:AutoShareServer
Type:DWORD
Value:0
--------------------------------------------------------
禁止ADMIN$ 預設共享
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
Name:AutoShareWks
Type:REG_DWORD
Value:0x0
--------------------------------------------------------
  * 附註: 強烈建議別分享 c$, 因為帳號/密碼等的資料可能會被偷走, 而且還有可能被放入開機自動執行的批次檔, 或 Windows 資料夾裡被放入有風險的執行檔.


 ● 8. 建議可以"停用"掉下列的服務,提高安全性和系統效率. (如果該服務沒有在被使用的話)
--------------------------------------------------------
Computer Browser 維護網絡上計算機的最新列表以及提供這個列表
Routing and Remote Access在局域網以及廣域網環境中為企業提供路由服務
Removable storage 管理可移動媒體、驅動程序和庫
Remote Registry Service 允許遠程註冊表操作
Print Spooler 將文件加載到內存中以便以後打印。要用打印機的朋友不能禁用這項
Distributed Link Tracking Client 當文件在網絡域的NTFS卷中移動時發送通知
Alerter 通知選定的用戶和計算機管理警報
Error Reporting Service 收集、存儲和向Microsoft報告異常應用程序
Messenger 傳輸客戶端和服務器之間的NET SEND和警報器服務消息
Telnet 允許遠程用戶登錄到此計算機並運行程序
DHCP (主機應該幾乎沒有人在用 DHCP 取得 ip 的吧).


 ● 9. 避免使用 "共用(通用)" 的密碼, 例如: 我們常用的那幾組.
--------------------------------------------------------
因為, 如果密碼是通用的, 一台主機被攻破(或被登入)後, 其他台主機就 "很容易" 被攻破.


對於, 已被入侵過的, 重要的主機, 建議找時間重灌, 不重要的 + 上面的案子(系統) 太多的話, 建議把封包監控+防毒+防火牆的規則設好.

當然, 定時對主機做 windows update, 是一定的, 就不列了.

2011年11月19日 星期六

ipsec 相關工具與指令研究

IPsec 主要可提供兩種功能:認證功能(Authentication)和保密功能(Confidentiality), IPsec 功能之一也可以拿來當作主機的防火牆, 避免主機中毒或被攻擊, 或在中毒後, 避免去攻擊別人. 聽說, ipsec 的設定值在 Windows 裡不能直接匯入/匯出, 所以如果我們用指令, 似乎會比較方便一點, 主機重灌後, 也可以直接套用到之前的設定值. 可以研究了一下下, 這些相關文章:


 ● IP Security(IPsec)是針對位於網路層的Internet Protocol所提出的安全性協定。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄http://structedtext.appspot.com/csec/ipsec.html



 ● 建立 IPsec 原則以限制連接埠
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://technet.microsoft.com/zh-tw/library/cc736995(WS.10).aspx

 step 1.從 [開始] 選單,先依序指向 [所有程式] 和 [ 系統管理工具],然後選取 [本機安全性設定值]。
 step 2.在 [本機安全性設定] 對話方塊中,按一下 [在本機電腦的 IP 安全性原則]。右邊的窗格會顯示預設的 Windows Server 2003 原則。
 step 3.在右邊的窗格上按一下滑鼠右鍵,然後按一下 [管理 IP 篩選器清單和篩選器動作]。
 step 4.於 [管理 IP 篩選器清單和篩選器動作] 對話方塊中,在 [管理 IP 篩選器清單] 索引標籤上,按一下 [新增]。
 step 5.在 [IP 篩選器清單] 對話方塊中的 [名稱] 方塊內,輸入您的篩選器清單名稱 (例如:輸入 HTTP)。若您想要的話,也可輸入相關的描述。此為套用到所有的輸入 HTTP 連線的篩選器清單。
 step 6.按一下 [新增]。出現 [IP 篩選器精靈]。建立篩選器清單...





 ● 如何設定 RPC 使用特定連接埠,以及如何使用 IPsec 以協助保護這些連接埠
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://support.microsoft.com/kb/908472/zh-tw

指派 IPsec 原則常用的3個參數 -x, -y, -o
*注意 本節中的命令會立即生效。

使用下列命令指派原則:
%IPSECTOOL% -w REG -p "Block RPC Ports" –x

注意 如果要立即取消指派原則,請使用下列命令:
%IPSECTOOL% -w REG -p "Block RPC Ports" –y

注意 如果要從登錄中刪除原則,請使用下列命令:
%IPSECTOOL% -w REG -p "Block RPC Ports" -o

* 您必須重新啟動主機,變更才會生效。



 ● ipseccmd 的用法….這東西蠻好用的耶^^
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://blog.pigbaby.com/?p=180


 ● ipseccmd 範例
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://forum.slime.com.tw/thread88684.html


 ● 加固基於Windows 2003平臺的WEB伺服器
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://forum.icst.org.tw/phpbb/viewtopic.php?t=8239


 ● 使用批处理启用或禁用端口
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://oce.blog.163.com/blog/static/1141177200802145013597/



 ● 如何使用 IPSec 來封鎖特定網路通訊協定和連接埠
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://support.microsoft.com/kb/813878/zh-tw


 ● 利用IPSec建立內部防火牆以提升資料庫安全
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://adalf0722.blogspot.com/2011/10/ipsec.html


 ● Internet Protocol Security (IPSec) policies 說明/用法
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ipsecmd.mspx?mfr=true




一般公司都會有外部防火牆來防止駭客直接入侵,應該還需要內部防火牆,來防內賊的,一般無內部防火牆的情況下,只要知道資料庫的IP、帳號及密碼,在內網就能夠去取得資料庫的資料,如果使用IPSec來建立內部防火牆,就能設定IP白名單,僅允許白名單上的伺服器可連接資料庫,也可以減少主機被內部的PC(或NB) 攻破的機率,也可以減少中毒(或被入侵)後對別台主機的影響.

2011年11月18日 星期五

如何記錄連線進來的程式以及相關資訊(Port Log)?

方案有2,
 ● 方案1: 安裝有 traffic (或 connection) log 功能的防火牆.
 ● 方案2: 使用 portRporter + Port Reporter Parser.
資料來源: http://support.microsoft.com/kb/837243/zh-tw


 ● 工具介紹
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Port Reporter 所記錄的資訊,來追蹤連接埠的使用狀況,並疑難排解特定問題。Port Reporter 工具所記錄的資訊對於維護安全性可能也很有幫助。

Port Reporter Parser 工具是 Port Reporter 記錄檔的記錄剖析器。 Port Reporter Parser 中有許多功能,可以協助分析 Port Reporter 記錄檔。



 ● 安裝 Port Reporter 服務
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ◆ 執行安裝程式 (Pr-Setup.exe) 來安裝 Port Reporter
 ◆ 設定和啟動 Port Reporter 服務
如果要確認 Port Reporter 服務是否安裝成功並啟動服務,請依照下列步驟執行:
  1. 按一下 [開始],用滑鼠右鍵按一下 [我的電腦],再按一下 [管理]。
  2. 展開 [服務及應用程式],再展開 [服務]。
  3. 在右邊窗格中,確認是否列出 Port Reporter 服務。
  4. 如果要啟動服務,請按兩下服務名稱,再按一下以選取 [啟動] 按鈕。按一下 [確定]。

 * 附註: Port Reporter 服務的啟動類型是設定為使用 [手動] 設定。如果您希望此服務可以在 Windows 啟動時自動啟動,請將啟動類型設定為 [自動]。




 ● 安裝 Port Reporter 服務
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Log 記錄檔的位置
依預設,Port Reporter 工具會嘗試在下列資料夾中建立記錄檔:
%systemroot%\System32\LogFiles\PortReporter
如果這個資料夾不存在,系統就會為您建立資料夾。您可以使用 [Port Reporter] 服務對話方塊中 [一般] 索引標籤上所指定的啟動參數,來設定記錄檔的位置。如果要指定記錄檔資料夾,請在 -ld 命令列選項後面加上您想要使用的資料夾名稱。請確認您在資料夾的名稱前後加上單引號 (')。例如,如果您指定下列啟動參數,Port Reporter 服務就會在啟動時,在 C:\Program Files\Port Reporter 資料夾中建立記錄檔:
-ld 'c:\program files\port reporter'



 ● Log 記錄檔的大小
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Port Reporter 預設會持續寫入記錄檔,直到記錄檔達到 5 MB。記錄檔達到 5 MB 之後,就會建立新的記錄檔。如果要設定記錄檔的大小,請使用 -ls 命令列選項。您可以將大小指定在 1000 KB 到 102400 KB 之間。例如,如果您指定下列啟動參數,Port Reporter 服務就會在每次記錄檔達到 7000 KB 時,建立新的記錄檔:
-ls 7000

使用 ipsec 做 ip address 或 封包的過濾

Windows 內建有一個 IPSEC 的服務,ipsec 功能之一就是在設定主機的防火牆, 避免主機中毒或被攻擊, 或在中毒後, 避免去攻擊別人.

這次的需求是,
1. 限制 所有的 IP 網段都不可以連目的協定udp, Port 137+139(網芳),
2. 允許 10.10.x.x 網段, 才可以連目的協定udp, Port 137+139(網芳),

ipsec的設定很方便,由於都有 GUI 使用起來還滿方便,設定也很直覺,建立 rule 的方式如下:

Create IPSec Policy
Typically, a Windows Server 2003 gateway is not a member of a domain, so a local IPSec policy is created. If the Windows Server 2003 gateway is a member of a domain that has IPSec policy applied to all members of the domain by default, this prevents the Windows Server 2003 gateway from having a local IPSec policy. In this case, you can create an organizational unit in Active Directory, make the Windows Server 2003 gateway a member of this organizational unit, and assign the IPSec policy to the Group Policy object (GPO) of the organizational unit. For more information, see the "Creating, modifying, and assigning IPSec policies" section of Windows Server 2003 online Help.
Click Start, click Run, and then type secpol.msc to start the IP Security Policy Management snap-in.
Right-click IP Security Policies on Local Computer, and then click Create IP Security Policy.
Click Next, and then type a name for your policy (for example, IPSec Tunnel with non-Microsoft Gateway). Click Next.

Note You can also type information in the Description box.
Click to clear the Activate the default response rule check box, and then click Next.
Click Finish (leave the Edit check box selected).
Note The IPSec policy is created with default settings for the IKE main mode. The IPSec tunnel is made up of two rules. Each rule specifies a tunnel endpoint. Because there are two tunnel endpoints, there are two rules. The filters in each rule must represent the source and destination IP addresses in IP packets that are sent to that rule's tunnel endpoint.



Build a Filter List from NetA to NetB
In the new policy properties, click to clear the Use Add Wizard check box, and then click Add to create a new rule.
Click the IP Filter List tab, and then click Add.
Type an appropriate name for the filter list, click to clear the Use Add Wizard check box, and then click Add.
In the Source address box, click A specific IP Subnet, and then type the IP Address and Subnet maskto for NetA.
In the Destination address box, click A specific IP Subnet, and then type the IP Address and Subnet mask for NetB.
Click to clear the Mirrored check box.
Click the Protocol tab. Make sure that the protocol type is set to Any, because IPSec tunnels do not support protocol-specific or port-specific filters.
If you want to type a description for your filter, click the Description tab. It is generally a good idea to give the filter the same name that you used for the filter list. The filter name appears in the IPSec monitor when the tunnel is active.
Click OK.


Build a Filter List from NetB to NetA
Click the IP Filter List tab, and then click Add.
Type an appropriate name for the filter list, click to clear the Use Add Wizard check box, and then click Add.
In the Source address box, click A specific IP Subnet, and then type the IP Address and Subnet mask for NetB.
In the Destination address box, click A specific IP Subnet, and then type the IP Address and Subnet mask for NetA.
Click to clear the Mirrored check box.
If you want to type a description for your filter, click the Description tab.
Click OK.


Configure a Rule for a NetA-to-NetB Tunnel
Click the IP Filter List tab, and then click to select the filter list that you created.
Click the Tunnel Setting tab, click The tunnel endpoint is specified by this IP Address box, and then type 3rdextip (where 3rdextip is the IP address that is assigned to the non-Microsoft gateway external network adapter).
Click the Connection Type tab, click All network connections (or click Local area network (LAN) if WIN2003extIP is not an ISDN, PPP, or direct-connect serial connection).
Click the Filter Action tab, click to clear the Use Add Wizard check box, and then click Add to create a new filter action because the default actions allow incoming traffic in clear text.
Keep the Negotiate security option enabled, and then click to clear the Accept unsecured communication, but always respond using IPSec check box. You must do this for secure operation.

Note None of the check boxes at the bottom of the Filter Action dialog box are selected as an initial configuration for a filter action that applies to tunnel rules. Only the Use session key perfect forward secrecy (PFS) check box is a valid setting for tunnels if the other end of the tunnel is also configured to use PFS.
Click Add, and keep the Integrity and encryption option selected (or you can select the Custom (for expert users) option if you want to define specific algorithms and session key lifetimes). Encapsulating Security Payload (ESP) is one of the two IPSec protocols.
Click OK. Click the General tab, type a name for the new filter action (for example, IPSec tunnel: ESP DES/MD5), and then click OK.
Click to select the filter action that you just created.
Click the Authentication Methods tab, configure the authentication method that you want (use preshared key for testing, and otherwise use certificates). Kerberos is technically possible if both ends of the tunnel are in trusted domains, and each trusted domain's IP address (IP address of a domain controller) is reachable on the network by both ends of the tunnel during IKE negotiation of the tunnel (before it is established). But this is rare.
Click Close.


Configure a Rule for a NetB-to-NetA Tunnel
In IPSec policy properties, click Add to create a new rule.
Click the IP Filter List tab, click to select the filter list that you created (from NetB to NetA).
Click the Tunnel Setting tab, click The tunnel endpoint is specified by this IP Address box, and then type WIN2003extIP (where WIN2003extIP is the IP address that is assigned to the Windows Server 2003 gateway external network adapter).
Click the Connection Type tab, click All network connections (or click Local area network (LAN) if WIN2003extIP is not an ISDN, PPP, or direct-connect serial connection). Any outbound traffic on the interface type that matches the filters tries to be tunneled to the tunnel endpoint that is specified in the rule. Inbound traffic that matches the filters is discarded because it must be received secured by an IPSec tunnel.
Click the Filter Action tab, and then click to select the filter action that you created.
Click the Authentication Methods tab, and then configure the same method that you used in the first rule (the same method must be used in both rules).
Click OK, make sure both rules that you created are enabled in your policy, and then click OK again.


資料來源:
http://support.microsoft.com/kb/816514/en-us#21

Facebook 留言板