不得不說上坤哥的課,真的是知識飽食時間!
而這次坤哥在PHP課所教的是防止有人透過
輸入HTML語法來破壞架構以及
SQL攻擊
回想以前就有位高中同學曾經使用過,人才呀!
(我倒是現在才領悟 ~"~)
首先,是防止 HTML 語法:
echo $comment;
[輸入]
<b>>"哈哈"</b>
<b>>"哈囉"</b>
[輸出]
>"哈哈" >哈囉
再來,加上
禁止HTML語法和
換行功能:
echo nl2br(htmlentities($comment, ENT_QUOTES));
[輸入]
<b>>"哈哈"</b>
<b>>"哈囉"</b>
[輸出]
<b>>"哈哈"</b>
<b>>"哈囉"</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...
留言
張貼留言