
雖然從IE8開始,html、css、javascript都開始邁向標準化,不過這個偉大的微軟,
竟然發明了「相容性檢視」,目的是為了可以在新版的IE,使用舊版的瀏覽器引擎去開所謂「IE Only」的網頁,
不想完全拋棄就算了,竟然還預設內部網路的網站都強制用這種模式去開網頁!
jonas1011 發表在 痞客邦 留言(2) 人氣(5,184)
一、跨網域限制
使用ajax進行http通訊時,必須處理跨網域限制,也就是限制頁面裡所請求的URL必須與頁面本身屬於相同網域,
就像是JavaScript不能操作其他頁框(frame)或子視窗中其他網域之網頁的內容一樣。這是各種瀏覽器所現有的限制,
實作時不需特別在意。
二、跨網站指令碼(cross-site scripting;XSS)
通常發生在表單傳送資料時,如server端的test.php程式
<?php echo($_GET['test']); ?>
這時有人不經表單而自行傳送
test.php?test=<script>alert('您好')</script>
這樣的GET請求,JavaScript是會被執行的。
●排除外來的程式碼:
常用的方法是將HTML標籤無效化,如將<轉換成<,將>轉換成>
php可使用htmlspecialchars()函式轉換
$data="<script>alert(1)</script>";
$data=htmlspecialchars($data);
echo $data;
perl可用正規表示式(regular expression)來轉換
$data=~ s/</</g;
print $data;
●JSON eval動作應小心
eval("var test=" + oj.responseText);
這段程式碼必須小心responseText的內容不能是外部傳送進來的原來樣子。
三、SQL/OS命令植入攻擊
●SQL Injection攻擊
$SQL="select * from tableA where id=".$_GET['id'].";";
像這樣對$_GET['id']原封不動放入SQL敘述裡,外部很有機會放入惡意程式碼來執行。
例如將$_GET['id']改為
;DROP TABLE tableA;
則tableA會被刪除掉
●單引號「'」插入SQL敘述攻擊
以PHP而言,可用mySQL_escape_string(),SQLite_escape_string()函式來跳脫SQL指令。
●OS命令植入攻擊(OS Command Injection)
程式中若使用system(),倒引號「`」來執行shell,可能會遭受OS Command Injection。
以PHP而言,可用escapeshellarg(),escapeshellcmd()函式避免風險。
若php.ini裡的magic_quotes_gpc設為on,則GET/POST/Cookie傳入之資料中所包含的所有單引號「'」、
雙引號「"」、反斜線「\」與null字元會自動被加上反斜線跳脫。
四、密碼檔案管理
密碼不能寫在JavaScript裡。
密碼不能寫在伺服端的程式碼裡。如http sever出問題,php或perl等程式碼可能會見光死。
ajax進行http通訊時,以open方法傳入帳號、密碼。原則上這些帳號、密碼應由使用者輸入,
伺服端應該這些資料加密,並妥善存放在不會被公開到web上的目錄下。
五、參考表格:
SQL Injection
mySQL/php對策:$code=mySQL_escape_string($_GET['code']);
mySQL/perl對策:$code=~s/'/"/g; $code=~s/\\/\\\\/g;
pgSQL/php對策:$code=pgSQL_escape_string($_GET['code']);
pgSQL/perl對策:$code=~s/'/"/g; $code=~s/\\/\\\\/g;
SQLite/php對策:$code=SQLite_escape_string($_GET['code']);
OS Commmand Injection
Linux/php對策:$safe_text=escapeshellarg($text);
Linux/perl對策:$test=~s/'/\\'/g;
cross site scripting
php對策:$data=htmlspecialchars($data);
perl對策:$data=~s/</</g;
jonas1011 發表在 痞客邦 留言(0) 人氣(303)
DOCTYPE 切換運作的方式:
若有完整 URI 的 XHTML DOCTYPE,則切到標準模式,用 W3C 規則來讀網頁裡的 CSS 與 XHTML。
若有不完整或過時的 DOCTYPE 或沒有 DOCTYPE,就切成相容模式,用傳統方法來處理網頁。
jonas1011 發表在 痞客邦 留言(0) 人氣(123)
jonas1011 發表在 痞客邦 留言(0) 人氣(204)
「MVC」是『資料處理邏輯』、『程式流程』、『資料呈現』三者分離的概念。
在「深入淺出設計模式」一書裡,對 MVC 三個角色的描述分別為:
Model - 持有資料、狀態、程式邏輯,並提供介面供人取得資料與狀態
View - 用來呈現 Model 中的資料與狀態
Controller - 取得使用者的輸入後,並解讀此輸入以轉換成 Model 對應的動作
jonas1011 發表在 痞客邦 留言(0) 人氣(104)