※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2015-08-09 08:12:05
看板 PHP
作者 標題 Re: [請益]請問 mysql_real_escape_string的寫法?
時間 Sat Aug 8 20:47:59 2015
※ 引述《ahoo122002 (承讓)》之銘言:
: 請問mysql_real_escape_string?
: 有大約google了一下sql injection
: 之後想說這樣寫ok嗎?
: 1.
: function test($value){
: return mysql_real_escape_string($value);
: }
: $name = test($_POST["name"]);
: $password = test($_POST["password"]);
escape sql 是在有 SQL 的地方才應該做的事情
沒有SQL 的時候 escape ...沒什麼 OK 不 OK 可言...
: 2.
: <?php
: function mysql_escape_mimic($inp) {
: // blah blah
: return $inp;
: }
: $name = mysql_escape_mimic($_POST["name"]);
: $password = mysql_escape_mimic($_POST["password"]);
不要寫自己的 escape function,要用別人寫好的
這世界比你以為的險惡太多...
你寫的方法看起來跟 addslashes() 滿類似的
那麼就有可能被人用塞入奇怪的多 byte 字元攻破
操作方法像是這篇
http://www.securityidiots.com
Welcome to Security Idiots!!
Security Idiots is a place where some insane idiots try thier hands on with Security. ...
Security Idiots is a place where some insane idiots try thier hands on with Security. ...
: 有高手可以提供其他好的寫法嗎?
: 先不談PDO,ORM <----這還不太懂
還是談一談比較好,用 PDO 比較不容易作錯事情...
// 1. DB 先生,你好,我要跟你建立連線
// 2. DB 先生,我等下要下這句 SQL,其中有個參數叫做「:name」
// 真的執行的時候我會跟你說會「:name」的內容是什麼
// 3. DB 先生,「:name」 的內容是 $_POST['name'],請跑我剛剛那句 SQL
// 4. DB 先生,請把剛剛執行的結果回給我
$db = new PDO('mysql:host={機器的IP};dbname={DB的名字}', '帳號', '密碼');
$db->prepare('SELECT * FROM user WHERE name=:name');
$db->execute([':name' => $_POST['name']]);
$result = $db->fetchAll();
其中那個 prepare() 在做的事情叫做「prepared statement」,細節請自己找
然後這樣下的話 DB 會幫你搞定 escape 之類的事情,你可以完全不用管
不用自己 escape,那就不會 escape 錯...
然後 ORM 其實只是把 DB 操作包裝起來而已,寫 code 的時候連 DB 在哪都不用管了
且 ORM 不是個標準,很多人在寫,大家寫的都不太一樣...
以下是 Laravel 的範例
// 查詢使用者資料
// 錢包扣一百元
// 存檔
$member = Member::where('name', '=', )->first();
$member->money = $member->money - 100;
$member->save();
一個 row 拉出來會變一個物件,然後可以直接改物件的內容來改資料
ORM 就是這件事...
好處是有人覺得這樣寫比較直覺(也有人不這麼認為)
然後你不用管 escape ,現代的 ORM 會幫你搞定(通常是透過底層的 PDO)
ORM 連 SQL 都不太讓你寫...
不用自己 escape,就不用擔心 escape 錯東西
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.58.126
※ 文章代碼(AID): #1LnVg2C7 (PHP)
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1439038082.A.307.html
※ 編輯: hiigara (114.27.58.126), 08/08/2015 20:53:24
--
--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 391
作者 hiigara 的最新發文:
- escape sql 是在有 SQL 的地方才應該做的事情 沒有SQL 的時候 escape ...沒什麼 OK 不 OK 可言... 不要寫自己的 escape function,要用別人寫好的 這 …
- 做網站地圖有幾種意思... 像是做一個網頁把所有可以看的東西列出來讓使用者看 Apple - 網站地圖 Apple.com/tw 網站地圖 ... 或是做一個 XML 或文字檔把所有可以看的東西列出來 …1F 1推
瞎
guest
回列表(←)
分享