mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击
SQL注入攻擊大多數(shù)與程序有關(guān)系,程序不嚴(yán)謹(jǐn)是導(dǎo)致SQL注入攻擊成功的一個(gè)原因。安全問題不容忽視,平常的開發(fā)中應(yīng)關(guān)注安全問題。下面簡單記錄PHP中的SQL攻擊問題。
什么是SQL注入攻擊
SQL注入(SQL Injection)是利用某些數(shù)據(jù)庫的外部接口將用戶數(shù)據(jù)插入到實(shí)際的數(shù)據(jù)庫操作語言(SQL)當(dāng)中,從而達(dá)到入侵?jǐn)?shù)據(jù)庫甚至是操作系統(tǒng)的目的。SQL注入攻擊產(chǎn)生的原因是由于程序?qū)τ脩糨斎氲臄?shù)據(jù)沒有嚴(yán)格過濾,導(dǎo)致非法數(shù)據(jù)庫查詢語句的執(zhí)行。
PHP案例演示SQL注入攻擊
正常演示
下面將使用PHP進(jìn)行簡單的SQL注入攻擊演示,因此沒有多大的代碼嚴(yán)謹(jǐn)度,只為演示SQL注入。
// test.php<?php
$conn?=?mysqli_connect('localhost','root','123456','demo');
if?(!$conn)?{
exit('數(shù)據(jù)庫連接失敗?'.?mysqli_connect_error());
}
$name?=?$_GET['name'];
$password?=?$_GET['password'];
#?重點(diǎn)在于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?
";第一:進(jìn)行一次正確和錯(cuò)誤的用戶名與密碼進(jìn)行登錄測試。#?表單中分別輸入正確與錯(cuò)誤的用戶名與密碼
#?可以看到用戶名與密碼正確時(shí)正常登錄
登錄成功
SQL語句:?select?*?from?user?where?name='lisi'?and?password='123456'
#?可以看到結(jié)果,登錄失敗了
登錄失敗
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內(nèi)置函數(shù)對(duì)SQL注入進(jìn)行防范。
預(yù)防SQL注入攻擊
針對(duì)字符串注入攻擊,可以在SQL語句中限制特殊符號(hào):單引號(hào),雙引號(hào),注釋等,已知非法符號(hào)有:'、"、;、=、(、)、/*、*/、%、+、>、
方式一:使用正則表達(dá)式$res?=?"/^[a-zA-Z0-9]{6}$/";
if?(empty($name)?||?empty($password)?||?!preg_match($res,?$name))?{
die('非法登錄');
}
方式二:使用PHP內(nèi)置函數(shù)過濾和轉(zhuǎn)義字符串$name?=?$_POST['name'];
$name=addslashes($name);
$name=str_replace("%","\%",$name);
$name=str_replace("_","\_",$name);
結(jié)果登錄失敗
SQL語句:?select?*?from?user?where?name='lisi\'?or?\'1=1\''?and?password=''
我是小白,期待和優(yōu)秀的你一起同行!
小白
2020年11月26日
轉(zhuǎn)載:感謝您對(duì)自如初博客網(wǎng)站的認(rèn)可,所有文章均屬原創(chuàng)文章,技術(shù)類文章轉(zhuǎn)載請注明出處,“自如初博客”;文學(xué)類文章請帶文本鏈接地址,否則視為侵權(quán)!
很贊哦!(6)
總結(jié)
以上是生活随笔為你收集整理的mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql sql字符串连接函数_Mys
- 下一篇: redis 存储数据不设置过期时间 会自