mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击
SQL注入攻擊大多數與程序有關系,程序不嚴謹是導致SQL注入攻擊成功的一個原因。安全問題不容忽視,平常的開發中應關注安全問題。下面簡單記錄PHP中的SQL攻擊問題。
什么是SQL注入攻擊
SQL注入(SQL Injection)是利用某些數據庫的外部接口將用戶數據插入到實際的數據庫操作語言(SQL)當中,從而達到入侵數據庫甚至是操作系統的目的。SQL注入攻擊產生的原因是由于程序對用戶輸入的數據沒有嚴格過濾,導致非法數據庫查詢語句的執行。
PHP案例演示SQL注入攻擊
正常演示
下面將使用PHP進行簡單的SQL注入攻擊演示,因此沒有多大的代碼嚴謹度,只為演示SQL注入。
// test.php<?php
$conn?=?mysqli_connect('localhost','root','123456','demo');
if?(!$conn)?{
exit('數據庫連接失敗?'.?mysqli_connect_error());
}
$name?=?$_GET['name'];
$password?=?$_GET['password'];
#?重點在于sql語句
$sql?=?"select?*?from?user?where?name='$name'?and?password='$password'";
$result?=?mysqli_query($conn,?$sql);
$userinfo?=?mysqli_fetch_array($result);
if?(empty($userinfo))?{
echo?'登錄失敗';
}?else?{
echo?'登錄成功';
}
echo?"
SQL語句:?$sql?
";第一:進行一次正確和錯誤的用戶名與密碼進行登錄測試。#?表單中分別輸入正確與錯誤的用戶名與密碼
#?可以看到用戶名與密碼正確時正常登錄
登錄成功
SQL語句:?select?*?from?user?where?name='lisi'?and?password='123456'
#?可以看到結果,登錄失敗了
登錄失敗
SQL語句:?select?*?from?user?where?name='lisi1'?and?password='1234561'注意:需要在地址欄輸入訪問
SQL注入攻擊演示
重頭戲來了,SQL注入攻擊。
注入一:用戶名表單中填入lisi' or '1=1,密碼可填可不填寫
注入二:用戶名表單中填入lii'#,密碼可填可不填登錄成功
SQL語句:?select?*?from?user?where?name='lisi'?or?'1=1'?and?password=''
登錄成功
SQL語句:?select?*?from?user?where?name='lisi'?#'?and?password=''
很明顯的可以看到,竟然登錄成功了,我的天,登錄沒有密碼竟然登錄成功了!有些慌呀,有木有。
既然有攻擊,那就有防范,下面就利用PHP內置函數對SQL注入進行防范。
預防SQL注入攻擊
針對字符串注入攻擊,可以在SQL語句中限制特殊符號:單引號,雙引號,注釋等,已知非法符號有:'、"、;、=、(、)、/*、*/、%、+、>、
方式一:使用正則表達式$res?=?"/^[a-zA-Z0-9]{6}$/";
if?(empty($name)?||?empty($password)?||?!preg_match($res,?$name))?{
die('非法登錄');
}
方式二:使用PHP內置函數過濾和轉義字符串$name?=?$_POST['name'];
$name=addslashes($name);
$name=str_replace("%","\%",$name);
$name=str_replace("_","\_",$name);
結果登錄失敗
SQL語句:?select?*?from?user?where?name='lisi\'?or?\'1=1\''?and?password=''
我是小白,期待和優秀的你一起同行!
小白
2020年11月26日
轉載:感謝您對自如初博客網站的認可,所有文章均屬原創文章,技術類文章轉載請注明出處,“自如初博客”;文學類文章請帶文本鏈接地址,否則視為侵權!
很贊哦!(6)
總結
以上是生活随笔為你收集整理的mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql sql字符串连接函数_Mys
- 下一篇: hive 临时表 with_Kettle