2008年7月5日 星期六

SQL INJECTION

SQL 指令植入式攻擊,但我覺得滿像填字遊戲..
SQL INJECTION並不是針對資料庫或是OS本身的漏洞來攻擊,會造成SQL INJECTION的得逞主要的原因是未做好輸入驗證Input Validation,所以說會造成DB的癱瘓最主要的原因就是程式設計師或軟體開發者的疏忽所產生的!!

舉個例子:
一般最基本的網站登入的驗證SQL Statement


SELECT * FROM DBO.USER WHERE ID = 'AJAX' AND PW = '密碼'

上面的SQL Statement應該是最基本的帳號驗證程式碼,看起來程式應該沒有什麼多大的問題...

但是如果使用者將帳號的輸入欄位改成:
AJAX --->> ' OR 1=1;--
則上面的登入驗證程式會改變成

SELECT * FROM DBO.USER WHERE ID = '' OR 1=1;--' AND PW = '密碼


這樣就會是一個很大的漏洞...

更嚴重的如果登入帳號在DB上有更大權限時....
AJAX --->> ' ;TRUNCATE TABLE DBO.USER --

SELECT * FROM DBO.USER WHERE ID = '' ;TRUNCATE TABLE DBO.USER --' AND PW = '密碼


AJAX --->> ' ;DROP Database (DB Name) --

SELECT * FROM DBO.USER WHERE ID = '' ;DROP Database (DB Name) -- ' AND PW = '密碼

或是嫌DB主機礙眼
AJAX --->> ' ;SHUTDOWN --

SELECT * FROM DBO.USER WHERE ID = '' ;SHUTDOWN -- ' AND PW = '密碼


我想這樣的後果大家應該都可以想像的到..!!!OH MY GOD!!!!!
所以說不管使用ASP.JSP.PERL.PHP等等...只要後端DB是使用SQL標準語法,都會有這種SQL INJECTION的危險!!
所以回過頭來說防範SQL INJECTION最簡單的方法還是 input validation
1.過濾所有可能的字串,例如ESCAPE(\).註解(--).分隔號(;)等等....
2.限制登入者身分的最小可存取之權限
3.將檢查放在Server端,而非Client端(不要輕易相信JAVASCRIPT的檢查結果)
4.使用SQL PROCEDURE來完成SQL Statement....

SQL INJECTION的防範最主要大概就是如此...
網路上有一些SQL INJECTION的檢測工具,大家去GOOGLE找一下應該就有了..

2008年7月3日 星期四

Jad(描述檔)與Manifest.mf(清單檔) 說明

1.描述檔Jad的作用很簡單, 只是單純地讓Java Application Manager 能夠在下載Jar 之前先做些檢查,確定手機上的VM符合Jar檔所需要。
2.根據MIDP 規格的規定,代表MIDlet Suite 的Jar 檔的內部要有一個清單檔(manifest.mf),
而且在檔案裡的屬性是不能重複的,順序性則是隨便沒有限制


以下為MIDP預先定義的一些屬性

MIDlet-Name:MIDlet Suite 的名稱。
MIDlet-Version:格式(主要號碼.次要號碼.最小號碼),這個屬性值是讓手機上的Java Application Manager來判斷版本的新舊。(都是兩位數)
MIDlet-Vendor:廠商名稱。
MIDlet-Icon:此MIDlet Suite 的圖示檔。
MIDlet-Description:描述MIDlet Suite 的相關訊息。
MIDlet-Info-URL:描述此MIDlet Suite 之相關資訊的URL 位址。
MIDlet-n:「應用程式名稱,圖示,類別名稱」
當一個MIDlet Suite裡有一個以上的MIDLet,決定當你啟動該程式集的排列先後順序
說明:
MIDlet-1: HONDA,HONDA.png,init.HONDA
MIDlet-2:HYUNDAI,HYUNDAI.png,init.HYUNDAI
所以當我啟動此程式集時HONDA排第一、HYUNDAI排第二
MIDlet-Jar-URL:當Java Application Manager要去下載JAR時的URL位置。
MIDlet-Jar-Size:Jar的大小byte為單位。
MIDlet-Data-Size:永久資料儲存區(persistent data)的大小?搞不太懂...
MicroEdition-Profile:說明MIDP-1.0、MIDP-2.0,如果該手機VM不支援的話就裝不起來了
MicroEdition-Configuration:性質同上
MIDlet-Delete-Confirm:要砍掉MIDlet Suite時提示的文字訊息


這些屬性都可以在執行時使用javax.microedition.mdilet.MIDlet.getAppProperty()


根據規定Jar描述檔裡至少要有下列幾項屬性:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MIDlet-Jar-URL
MIDlet-JAR-Size

根據規定manifest.mf檔案裡至少要有下列幾項屬性:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MIDlet-n
MicroEdition-Profile
MicroEdition-Configuration

我們可以發現至少在這兩個檔案裡至少都要有MIDlet-Name、MIDlet-Version、MIDlet-Vendor
不過我平常將程式送到手機的主要方式都是使用Bluetooth,因此Jar描述檔對我而言是可有可無的...

手機相關名詞說明...(持續增加中)

SIMSubscriber Identity Module(用戶身份模組)
A small smart card which contains both programming and information.

MIDlet Suite : 一個或是一個以上的MIDlet 所構成的集合。
MIDlet :一個可以執行的手機應用程式之基本單位。
JAR:包住MIDlet Suite 的File。
JADJava Application Descriptor(描述檔)

2008年7月2日 星期三

Sony Ericsson Java Platform Versions

Java Platform 1(JP1)
MIDP 1.0 、CLDC 1.0、JSR-135 (MMAPI)
Java Platform 2(JP2)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1
Java Platform 3(JP3)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1、JSR-184 (Mobile 3D)、Mascot Capsule V3
Java Platform 4(JP4)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1、JSR-184 (Mobile 3D)、Mascot Capsule V3
Java Platform 5(JP5)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1、JSR-184 (Mobile 3D)、Mascot Capsule V3、JSR-75 (File/PIM)、JSR-82 (Bluetooth)
Java Platform 6(JP6)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1、JSR-184 (Mobile 3D)、Mascot Capsule V3、
JSR-75 (File/PIM)、JSR-82 (Bluetooth)、JSR-172 (Webservices)、JSR-205 (WMA 2.0)
Java Platform 7(JP7)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 、(MMAPI)、Nokia UI API 1.1、JSR-184 (Mobile 3D)、Mascot Capsule V3、JSR-75 (File/PIM)、JSR-82 (Bluetooth)、JSR-172 (Webservices)、JSR-205 (WMA 2.0)、JSR-234 (AMS, Camera capabilities only)
Java Platform 8(JP8)
MIDP 2.0、CLDC 1.1、JSR-185、JSR-120 (WMA)、JSR-135 (MMAPI)、Nokia UI API 1.1、JSR-184 1.1 (Mobile 3D)、Mascot Capsule V3、JSR-75 (File/PIM)、JSR-82 (Bluetooth)、JSR-172 (Webservices)、JSR-205 (WMA 2.0)、JSR-234 (AMS)、JSR-248 (MSA)、JSR-226 (SVG)、JSR-177 (Security & Trust)、JSR-179 (Location)、JSR-180 (SIP)、JSR-211 (Content Handler)、
JSR-229 (Payment)、JSR-238 (Internationalization)、JSR-239 (OpenGL ES)、JSR-256 (Mobile Sensor)

我的k600i 是屬於Java Platform 5(JP5)