※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2015-10-29 10:52:30
看板 PHP
作者 標題 Re: [請益] PHP字元溢位(OverFlow)
時間 Thu Oct 29 02:49:46 2015
※ 引述《st1009 (前端攻城師)》之銘言:
: 不好意思,我初學php加設網頁後台,
: 想詢問一些關於php的基本問題>///<
: 1.
: 請問php的一個變數內部可以融納下多少位字元,我在查這個時都查到整數(int)的~__~
: 如果我設定 $x = $_POST["x"]; 讓使用者輸入字串,
: 使用者輸入字串超出變數可以融納下的範圍php會如何處理?
不同資料型態不能一概而論,也不建議去挑戰這種事情。
不過以字串來說..
https://secure.php.net/manual/en/language.types.string.php
「Note: string can be as large as up to 2GB」
字串長度上限是2GB,我想應該大多數情況下你不用擔心有人 post 2GB 的東西進來...
陣列在記憶體夠的前提下,我平常用的時候百萬或千萬之類的數量也沒啥問題
同樣的我想你應該也不用擔心有人 post 一千萬個欄位進來...
在你碰到這麼大的資料之前,通常你會先因為記憶體不夠而整隻 script 死掉。
: 2.
: 我看網路上有的網址為.php?id=1
: 有的甚至可以直接在URL列登入帳號密碼,
: 請問這個運作過程為何?為何能實現?
: 再自行架設的網站內試圖於URL登入,但都失敗QAQQQ
「登入」的意思是「記住這個人是誰」,至於是 post 或 get 都跟「記住」這件事無關
記住的方法可以用 session,也可以用 cookie。
程式流程大概會像這樣
- 檢查帳號密碼對不對
- 對了,做一個記住的動作
- 錯了,做一個顯示錯誤訊息的動作
當然了,登出也就是「忘掉」,把「我是誰」這件事從 session/cookie 裡面砍掉
不過 cookie 是使用者可以亂改的東西,使用時請注意
但是講到這個用網址登入...假設你可以可以用網址直接登入,那麼
- 瀏覽器的歷史會記住這個帳號密碼
- 你後面的人會看到網址列的帳號密碼
- Google 可能會記住這個帳號密碼
- 我可以搜尋「inurl:www.example.com/login.php」直接爬出一大堆
- 各種奇怪爬網址的 bot 可能會抓到這個帳號密碼
不要、不要、不要用 get 傳帳號密碼
登入時傳帳號密碼請用 post
: 3.
: 我看見訪間有一種網頁攻擊方式為xss攻擊,
: 再自行架設後的留言板中進行測試,
: 發現如果我直接輸入<script>標籤他會產生反應,
: 但是當輸入:
: <script>alert
: ('hacked')</sc
: ript>
: 卻是以字串方式呈現,是否xss攻擊無法由10進制html代碼,甚至其他代碼執行,
: 只要我過濾掉了'<'和'>'就不須當心xss了?
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
這一整頁長長的都是 XSS 的方法,裡面有很多不用直接打 <>
實際上到底要怎麼防禦才完善要 case by case 去看
- html 的內文要靠 htmlspecialcahrs() 去洗
- 如果你還想讓使用者自己輸入 html,自己擋會擋不完...請參考 html purifier
- javascript(咳)通常可以靠 json_encode() 去洗
- 網址...恩...這有點難搞...
: 4.
: 聽說要擋住sql injection 只要使用magic quotes就可以了(?
: magic quotes後來不被php自動執行請問是有什麼副作用?如何避免?
不要用 magic quotes,這是上個世紀留下來的失敗功能
- 你會拿不到原始的使用者輸入資料
- 稍微不小心一點,你就會把「It's Friday」存檔成「It\'s Friday」
- 對於有經驗的攻擊者以及設計良好的 bot,magic quote 毫無用處。
所以 PHP 三年前把這功能拔掉了。
現代推薦的正確做法,是使用 PDO 跟 prepared statement
$db = new PDO($dsn, $db_user, $db_password);
$stmt = $db->prepare("SELECT nick_name FROM users WHERE uid = ? LIMIT 1");
$stmt->execute([$uid]); // 這邊就算 uid 被塞了髒東西也不用怕
$result = $stmt->fetch();
echo is_array($result) ? "我是" . $result['nick_name'] : "查無此人";
--
莉娜用魔法爆破進入屋內。
劫犯從另一個房間裡出現,大叫道︰「妳是誰!」
莉娜︰「我是個可疑的女人!」
劫犯無言以對。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.80.218
※ 文章代碼(AID): #1MCHZHgZ (PHP)
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1446058193.A.AA3.html
※ 編輯: GALINE (114.27.80.218), 10/29/2015 03:18:26
--
--
作者 GALINE 的最新發文:
- 被 tag 所以來貼一下 跟中午那份比較不一樣的是 這份可以照行政區/屋齡...等條件做比較細的查詢 例如: 台北市整體 台北新大樓 竹科人的家 要注意幾點 - 目前單價計算沒有排除車位,跟一般討論 …35F 28推
- 列出一部分變更: - 效能提升(這快要算不上新消息了...) - 物件的成員可以設定資料型別 - public static iterable $list; - 不能用 callable(行為不固定 …12F 4推
- 列出一部分變更: - 整體效能提升 - 民間測試認為比 PHP 7.2 提升 10%,比 7.0 提升 30% - 新增 is_countable() - 因應 7.2 count() 嚴謹化的需求 …6F 6推
- 跟原題無關,但是看到這段想到 PHP 的原創造者 Rasmus Lerdorf 前幾個月的演講 「1993 我用 C 寫 CGI,HTML 跟程式碼纏在一起,隨便改個 html 就要重新 compil …5F 4推
- 覺得有需要把這幾點講清楚 - PHP 怎麼處理 autoload - PSR-0 / PSR-4 做了什麼 - composer 在幹嘛 == PHP 本身怎麼處理 autoload == 基本上,P …20F 18推
點此顯示更多發文記錄
瞎
guest
回列表(←)
分享