[分享] 網頁/PHP 之 Programming/Debug

看板PHP作者 (霸格尼尼)時間16年前 (2009/03/24 03:24), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/1
一個網頁從後端程式邏輯到前端顯示互動 經過很多層的處理 一個PHP網頁 可能會經過 PHP PHP裡面的PCRE Shell SQL HTML Javascript Javascript的RE CSS 這麼多層(順序不一定) 各個都有自己的parser 遇到問題的時候務必要搞清楚自己面對的哪一個parser 注意引號和\和你用的語法 是要給哪個parser看的 以幾個案例來說 版名 AID The Point Web_Design #19lvUAyo 混淆HTML/Javascript PHP #19iKZdp_ 混淆PHP/PCRE PHP #16WYEVxu PHP+PCRE Escape PHP #19ix2T8Z PHP+SQL Quote SQL Injection也可以視為PHP/SQL之間不當的quote造成的問題 XSS則是PHP/Javascript之間欠缺escape 平常除錯的時候也要盡可能縮小bug經過的層次 以PHP版的#19nv8N5m #19oHP55Z來說 問題出在HTML層 原po應該一層一層檢查 PHP看不出什麼錯 就改看HTML source 而不是從PHP<-->HTML Rendering跨這麼大層面來看 debug要分層來 同理於unit test #19oY9PJp這篇更慘 原po自己看不到問題之後 還把問題簡化了 結果變成另一個問題 #19omHE9p 有些好東西/好方法可以幫助你在不同層面之間不會頭昏 1.json常用於把PHP的資料結構轉換成Javascript的語法 就不用自己quote/escape半天了 2.prepare statement或meta function 通常用來打造SQL 可以簡單用sprintf 或像http://security-hole.info/~buganini/dev/PHP/mysql.php mksql()就是個prepare statement的範例 sql_inset() sql_update()是meta function的範例 3.適當選擇Quote 在PHP裡面寫SQL的時候 很多人會用 "SELECT ... $var ..." 這樣在裡面放變數可以少用幾個quote 在PHP裡面寫HTML的時候我通常這樣寫echo '<a href="xxxx">xxxx</a>'; 比較方便讓HTML tag attribute用" (比較符合標準) 如果裡面要裝變數的話就可以考慮用雙引號 作網頁能接觸到的語言大多都能支援單雙引號 只要注意像PHP的單雙引號的意義不同 要自己評估適用哪一種 其他語言大都可以隨意混用 當外面用了一種的時候 裡面就用用另外一種 像echo '<a href="xx" onclick="alert(\'lala\')">xx</a>'; 這樣一行就有PHP/HTML/Javascript三層quote了 而MySQL還有一種quote `是用來包資料庫/欄位名稱的 文字單雙引號都可以用 如果是用MSSQL 規則又不一樣了 字串要用單引號 欄位用雙引號 樓上那篇#19nzQJXT就是quote錯誤的範例 4.程式裡用到system() shell_exec()之類的函式的話 就會牽涉到Shell PHP有escapeshellcmd() escapeshellarg()可以用 但是就我的經驗 Windows底下escapeshellcmd()好像沒有用? 路徑裡面有空白的時候 雖然quote了還是會被切開的樣字 -- 想到再補 -- 國愛‧主民‧學科‧康健‧道人 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.231.23

03/24 05:32, , 1F
推一個~
03/24 05:32, 1F

03/24 18:24, , 2F
推好文~XD
03/24 18:24, 2F

03/25 14:36, , 3F
推!
03/25 14:36, 3F
※ 編輯: buganini 來自: 220.135.231.23 (03/26 17:30)
文章代碼(AID): #19n-82R0 (PHP)
文章代碼(AID): #19n-82R0 (PHP)