小弟目前再研究sql injection 的相關問題,
照著網路上的教學,發現我使用' OR 1=1 -- 還是無法駭進自己的登入系統
使用 ' OR 1=1 -- ,把$sql_login echo 出來在--後面會多一個'
SELECT account
FROM admin
WHERE account
= '123' OR 1=1 --' AND password
= ''
想請問'在--橫面不是等同於被佇解掉了嗎?那為何無法執行登入呢?
有沒有推薦的資源讓我多了解sql injection這方面的知識呢?
<?php
require_once 'connection/connect.php';
session_start();
?>
<?php
if(isset($_POST['login_check']) && $_POST['login_check'] == 'login_check'){
$sql_login = "SELECT `account` FROM `admin` WHERE `account` = '{$_POST['account']}' AND `password` = '{$_POST['password']}' ";
$result_login = mysqli_query($link,$sql_login);
$row_login = mysqli_num_rows($result_login);
//SELECT `account` FROM `admin` WHERE `account` = '123' OR 1=1' -- AND `password` = '' 不可
//SELECT `account` FROM `admin` WHERE `account` = '123' OR 1=1' -- AND `password` = ''
//SELECT `account` FROM `admin` WHERE `account` = '123' OR 1=1 --' AND `password` = ''
//SELECT `account` FROM `admin` WHERE `account` = '123' OR 1=1 -- AND `password` = '' 可
echo $sql_login;
if($row_login){
$_SESSION['MM_USERNAME'] = $_POST['account'];
header("Location:index.php");
}else{
header("Location:login.php");
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<label>帳號:<input type="text" name="account"></label>
<label>密碼:<input type="password" name="password"></label>
<input type="hidden" name="login_check" value="login_check">
<input type="submit">
</form>
</body>
</html>
防止sql injection最好的方法就是……
不.要.相.信.任.何.來.源.通.通.過.濾
也可以參考我2016年做的影片
PHP PDO 第二篇:如何防範SQL INJECTION
他...好像想問怎的打...
因為他說想多了解Sql Injection
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
如果要自己打,也是有免錢工具,上面規則比較多
沒想到 cola 大仔的聲音還挺溫和地,和凶神惡煞的形象,落差很大,「如聞其聲,如見其容」在此似乎不成立。
課上完了,一聽就懂,還有沒有別的課程啊?
我為什麼變成兇神惡煞了?
他的一套我都放集了
在這裏
不過說真的,沒完全。
因為他後期很懶的再做影片下去了
喂喂,可樂快補續集啦!!
浩瀚星空
後來就工作忙碌啊!你又不是不知道我整個人跳進iOS陣營。
然後又不是不知道我一直都沒有參加鐵人賽。
因為弄那些教學都要花時間。
不知道基礎教學中是不是應該稍微補充一下一些安全上的細節。下面這篇是我前幾個月才看到的,之前都不知道...
Are PDO prepared statements sufficient to prevent SQL injection?
SELECT account FROM admin WHERE account = '123' OR 1=1 --' AND password = ''
那大概是因為帳號沒有123...
其實,答案是。
「--」並不是註解。
要
「-- 」才是。
選我正解。哈哈哈!!
有需要這樣驚訝嘛!!!
我也想要搞怪一下沒!
哈哈!那一定是被小魚大
帶壞的!可樂大
的精髓是「不管我回答什麼,都不要給我最佳解答!」
Darwin Watterson
我說的可是真心話。
很多時候我覺得大家的回答都很棒。
卻硬要人家非得選出一個「正確答案」或是「最佳解」是很奇怪的一件事。
像藍色小舖,起碼還可以採取配分制度給每個回答者點數。
不要使用form input及querystring到的變數來動態產生SQL查詢句,就算是非用不可,也要把單引號給逸脫代換掉,不然代誌潦潦
在SQL 裡判斷是否有 OR 關鍵字是否可防止 sql injection 攻擊?
防止SQL資料隱碼, 你需要的是
參數化查詢
https://zh.wikipedia.org/wiki/%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2