不得不說上坤哥的課,真的是大學生涯的(知識)飽食時間!!
而這次坤哥在PHP課所教的是防止有人透過
輸入HTML語法來破壞架構以及
SQL攻擊
回想起4,5年前有位高中同學曾經使用過,人才呀~
(我倒是現在才領悟~"~)
- - -
首先
是防止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...
留言
張貼留言