Latest

與學校老師相關的英文稱呼

project advisor 專題指導老師 class tutor 班導 (XXX Course) Instructor (XXX課) 授課老師 mentor 導師 (不確定具體使用的時機) 參考: [問題] "Relationship to you" 要怎麼填 - 看板 studyabroad - 批踢踢實業坊

防止 HTML 和 SQL 攻擊...還有 mysql_connect() 之連結失敗

不得不說上坤哥的課,真的是知識飽食時間!
而這次坤哥在PHP課所教的是防止有人透過輸入HTML語法來破壞架構以及SQL攻擊

回想以前就有位高中同學曾經使用過,人才呀!
(我倒是現在才領悟 ~"~)


首先,是防止 HTML 語法:
echo $comment;

[輸入]
<b>&gt"哈哈"</b>
<b>&gt"哈囉"</b>
[輸出]
>"哈哈" >哈囉

再來,加上禁止HTML語法換行功能:
echo nl2br(htmlentities($comment, ENT_QUOTES));

[輸入]
<b>&gt"哈哈"</b>
<b>&gt"哈囉"</b>

[輸出]
<b>&gt"哈哈"</b>
<b>&gt"哈囉"</b>

但不知道為什麼我加了可以轉換單引號和雙引號的 ENT_QUOTES 卻依舊沒轉換 = =


要防止 SQL 攻擊則是先講如何攻擊:

像是在密碼框輸入' OR ' ' = '
SQL 指令就會變成 SELECT * FROM `person` WHERE pw`=' ' OR ' ' = ' '
因為 OR 必為 true,於是在按下了登入鍵後...login success~♪

防止的方法則是:
$pw  = mysql_real_escape_string($_POST["password"]);

mysql_real_escape_string() 可以讓一些符號做轉換,像是:
[ ' ] 變成 [ \' ]
[ " ] 變成 [ \" ]

但是以上方法我在學校 (PHP 7 以下) 測試成功在家 (PHP 7.0.4版) 卻跑出以下訊息 ↓
Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\test.php:39 Stack trace: #0 {main} thrown in C:\xampp\htdocs\test.php on line 39

上網得知是因為 PHP 7.0.0 版已經移除 mysql_connect() 這個方法了@@
新的則是用 mysqli_connect()

同理可用在修改其他 SQL 的方法上
如:mysqli_real_escape_string()

不過...
全部都修改後,我為什麼連不到資料表 =口=

To be continued...

留言

這個網誌中的熱門文章

國泰世華信用卡 異常簽帳消費

打火機處理記 (注意,有爆炸危險!) (2021.09.11 更新)