jinseok wrote:
我們公司有一個網站,...(恕刪)
會被改資料庫的資料而且改的內容如果是這類的:">"那就一定是SQL Injection!
沒有別的方法只有改程式而已~~~
1. 不可以用組合的SQL statement,要用parametize的SQL Statement~~
這種的鐵定掛!
sqlstr = "SELECT * FROM Customers WHERE Email ='" + email + "' and Password='" + password + "'"
要改用Parametize:
SET rsObj = Server.CreateObject("ADODB.Recordset")
Set cmd = Server.CreateObject("ADODB.Command")
str = "SELECT * FROM Customers WHERE Email =? AND Password = ?"
set cmd.ActiveConnection = DBConn
cmd.ActiveConnection.CursorLocation=3
cmd.Parameters.Append cmd.CreateParameter("",200,1,255,email)
cmd.Parameters.Append cmd.CreateParameter("",200,1,255,password)
cmd.CommandText = str
rsObj.open cmd,,adOpenForwardOnly, adLockReadOnly, adCmdText
2.盡量使用Stored Procedure。
3.黑名單已經不合用了,反而Input validation要做好,例如資料長度檢查;數字欄位,如果輸入的是非數字就警告格式不對;Email欄位就要檢查是否符合Email格式;善用Regex檢查輸入值等。
3.單引號(')在存入資料庫前一定要先替換成兩個單引號(''),以避免惡意碼執行SQL指令。
4.一定要把所有的程式碼都review一次,其實也不難,用Notepad++之類的文書處理軟體,可以使用關鍵字Select、Insert或者Update搜尋整個目錄的檔案,找出有SQL statement的檔案再去做review就好。
5.只要是網頁程式都會有SQL Injection攻擊的可能,所以資料庫備份一定要做好,這樣才能將損害降低,最好是每周一次完整、其餘天數差異備份、每十五分鐘做一次Transaction Log備份。
以上希望可以幫到你!
其他的光是砸錢買防火牆的建議都是沒用的。
我本身並不是專門寫網頁的工作人員,但是基本的是看的懂的。 本身是對 Linux 與 php 熟一些。
由 hkc6389 的建議中說到最好可以使用 stored procedure 之外,個人再補充幾點。
1. web server 跟 database 最好可以實體分離, 而所有的資料庫存取都需要以 stored procedure 來取代,更重要的一點是,你提供給 web server 來存取資料庫的 user 不可以是 superuser... 要設定一個小帳號只可以對 stored procedure 做 select 的動做,其他的權限都不要開。 這麼做的好處是當您的 web server 被入侵後,壞人也只是會被這個封閉的設定給局限住,沒辦法再做下一步的破壞。
2. ASP 我個人並沒有研究, 在 PHP 中,其實最好要把有危險性的 function 都關掉比方說 fopen, exec, passthru, eval, system, fwrite 等等等的都關掉,可以少很多途徑被壞人所利用。
3. 防火牆的部份其實不光光要檔從外面進來的連線。 也要檔從裡面到外面的連線。 因為有時候入侵的來源並不是外面直接連線到您的資料庫,而是您公司員工自己的電腦被開了後門,壞人是從裡面直接連進去資料庫做破壞的。 這部份如果在 Linux 中可以直接跑 iptables 就夠用了,不一定要用貴森森的 fw.
另外,資料庫與 web 本身應該把對外的連線都關掉, 可以防止在壞人取得控制全後,進一步的抓取其他的工具與後門過來裝。 gcc, base64 等的 hex 轉 binary 的工具也最好都移除掉。可以讓入侵者花更多時間在安裝它所需的工具或後門。
非常非常貴的防火牆如果不會使用,或是使用不正確。 其效能跟防護能力不會比正常設定了的軟體防火牆好。
找一個真正懂的人來協助檢查及改寫程式碼會比請一堆 "顧問公司" 來的有效果且更便宜。
名片上頭銜寫 "工程式" 或是 "顧問" 的,很多時候能力不如在背後乖乖的幹,叫不出名字的人還要差。
以上,希望對貴公司有幫助
googee wrote:
看了一下上面這麼多人提供的意見,個人認為只有 hkc6389 大哥的意見比較有效果。
其他的光是砸錢買防火牆的建議都是沒用的。
我本身並不是專門寫網頁的工作人員,但是基本的是看的懂的。 本身是對 Linux 與 php 熟一些。
由 hkc6389 的建議中說到最好可以使用 stored procedure 之外,個人再補充幾點。
1. web server 跟 database 最好可以實體分離, 而所有的資料庫存取都需要以 stored procedure 來取代,更重要的一點是,你提供給 web server 來存取資料庫的 user 不可以是 superuser... 要設定一個小帳號只可以對 stored procedure 做 select 的動做,其他的權限都不要開。 這麼做的好處是當您的 web server 被入侵後,壞人也只是會被這個封閉的設定給局限住,沒辦法再做下一步的破壞。
2. ASP 我個人並沒有研究, 在 PHP 中,其實最好要把有危險性的 function 都關掉比方說 fopen, exec, passthru, eval, system, fwrite 等等等的都關掉,可以少很多途徑被壞人所利用。
3. 防火牆的部份其實不光光要檔從外面進來的連線。 也要檔從裡面到外面的連線。 因為有時候入侵的來源並不是外面直接連線到您的資料庫,而是您公司員工自己的電腦被開了後門,壞人是從裡面直接連進去資料庫做破壞的。 這部份如果在 Linux 中可以直接跑 iptables 就夠用了,不一定要用貴森森的 fw.
另外,資料庫與 web 本身應該把對外的連線都關掉, 可以防止在壞人取得控制全後,進一步的抓取其他的工具與後門過來裝。 gcc, base64 等的 hex 轉 binary 的工具也最好都移除掉。可以讓入侵者花更多時間在安裝它所需的工具或後門。
非常非常貴的防火牆如果不會使用,或是使用不正確。 其效能跟防護能力不會比正常設定了的軟體防火牆好。
找一個真正懂的人來協助檢查及改寫程式碼會比請一堆 "顧問公司" 來的有效果且更便宜。
名片上頭銜寫 "工程式" 或是 "顧問" 的,很多時候能力不如在背後乖乖的幹,叫不出名字的人還要差。
以上,希望對貴公司有幫助...(恕刪)
找人要錢
我做過微軟的debugger
這種東西沒30萬不接的
細的東西懂,十幾年以及開發紅帽系統的經驗
而且摸過一次,人家還懷疑你殖後門,到時被告要律師費
這年頭hacker入侵都是用合法管道(port 80 / 443)做不合法的事情
一般Firewall /IPS /IDS都只能管到OSI Layer 3 or 4底層的Tcp / IP / port
這完全沒有用啦
您真正需要的是WAF solution + Code Review / Upgrade
Code Review / Upgrade屬於開發商的事情 (但廠商10個有9個半不會鳥你)
WAF應該是公司自己準備
沒錢的話也有Free WAF Solution
Apache可以加modsecurity模組
IIS可以裝urlscan
再透過滲透測試找到弱點後設定WAF rule擋掉入侵
這才是真正解法
TWNIC 101 年度網路安全教育訓練課程


























































































