顯示廣告
隱藏 ✕
※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2015-08-09 08:12:05
看板 PHP
作者 hiigara (石頭)
標題 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. ...

 
/Web-Pentest/SQL-Injection/addslashes-bypass-sql-injection.html

: 有高手可以提供其他好的寫法嗎?
: 先不談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 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇