這種東西應該是程式設計師在寫
程式的不嚴謹所造成的,其實跟軟體系統比較無關...
簡單的說,就是
利用程式的漏洞侵入而已。
\n例如:
有個可以搜尋的功能,通常比較懶的程式設計師會直接把查詢(query)的字串(string)當成 SQL 語法來用,也就是使用者若輸入 「abc」,則程式就有可能是:
代碼: 選擇全部
Select user="abc" from xxx
,這樣若不加以檢查的話,假設有人特意輸入:
代碼: 選擇全部
[b]'[/b]; shell(exec) adduser myname .....
請注意,他刻意輸入單引號造成不嚴謹的程式以為sql語法結束,若此時又可以執行系統指令時(通常不可以,但 M$ 的系統比較容易...),就可以被增加一個叫 myname 的使用者,倘若他權限也開的話....那大概就為所欲為了...
所以提到 SQL injection 一般會說破壞是來自於內部,這樣的破壞反而更嚴重,因為你以為它是「合法」的使用者或執行敘述,其實不然。
所以好的程式應該要在查詢前先做過濾或判斷的動作,才不會被人有機可趁。