mysql安全性試驗 Mysql安全性測試

2021-10-19 20:43:42 字數 3752 閱讀 6094

一、沒有進行預處理的sql語句<?php

// 1.連線資料庫

$conn = mysql_connect('127.0.0.1:3306', 'root', '518666');

if (!$conn)

die("could not connect:" . mysql_error());

// 2.選擇資料庫

mysql_select_db('mysql_safe', $conn);

// 3.設定編碼,注意這裡是utf8而不是utf-8,如果寫後者,mysql不會識別的,會出現亂碼的。

mysql_query("set names utf8");

$title = "我們的愛情";

$content = '你是/誰啊,大幾\都"老梁"做做&>women沒';

$add_time = date("y-m-d h:i:s");

// 轉義字元

$content = mysql_real_escape_string($content);

$content = htmlspecialchars($content, ent_compat);

// 你是/誰啊,大幾都做做&>women沒 // 自動過濾反斜槓

// 4.插入一條資料

$insert_sql = "insert into post_tbl (title, content, user_id, add_time) values ('', '', '4742551', '')";

if(mysql_query($insert_sql))

echo 'ok';

else

echo "error : " . mysql_error();

$ret = mysql_affected_rows();

print_r($ret);

// 5.pdo預處理插入

// pdo(php data object)則是提供了乙個 abstraction layer 來運算元據庫

// 查詢

$user_id = 174742;

$password = "''or '1=1'" ;

$sql = "select * from post_tbl where user_id = and password = ";

print_r($sql);

$query = mysql_query($sql);

// $result = mysql_fetch_array($query);

$rows = array();

while($row=mysql_fetch_array($query))

$rows = $row;

print_r( $rows);

// 關閉資料庫連線

mysql_close($conn);

$str = "bill & 'steve'";

echo htmlspecialchars($str, ent_compat); // 只轉換雙引號

echo "

";echo htmlspecialchars($str, ent_quotes); // 轉換雙引號和單引號

echo "

";echo htmlspecialchars($str, ent_noquotes); // 不轉換任何引號

以上**的 html 輸出如下(檢視源**):

bill & 'steve'

bill & 'steve'

bill & 'steve'

以上**的瀏覽器輸出:

bill & 'steve'

bill & 'steve'

bill & 'steve'

function mforum_html_tag_to_html_entity($content)

$content = (string)trim($content);

if(empty($content)) return '';

// $content = str_replace(' ', ' ', $content);

$content = htmlspecialchars($content, ent_compat, gb2312, false);

$content = str_replace(">", ">", $content);

$content = str_replace("<", "<", $content);

$content = str_replace("\"", """, $content);

$content = preg_replace("/\\\$/", "$", $content);

$content = preg_replace("/\r/", "", $content);

$content = str_replace("!", "!", $content);

$content = str_replace("'", "'", $content);

$content = preg_replace("/\\\/", "\", $content);

// 內容敏感詞過濾

return $content;

二、pdo處理的sql語句<?php

// pdo的使用

// $dbh = new pdo('mysql:host=127.0.0.1:3306;dbname=mysql_safe', 'root', '518666');

$dbh->setattribute(pdo::attr_errmode, pdo::errmode_exception);

$dbh->exec('set names utf8');

$title = "我們的愛情";

$content = '你是/誰啊,大幾\都"老梁"做做&>women沒' . " 測試列印號'我是單引號'哈哈";

$user_id = 174742;

$add_time = date("y-m-d h:i:s");

// $insert_sql = "insert into post_tbl (title, content, user_id, add_time) values (:x_title, :x_content, :x_user_id, :x_add_time)";

// $stmt = $dbh->prepare($insert_sql);

// $stmt->execute(array('x_title'=>$title,':x_content'=> $content, ':x_user_id' => $user_id, ':x_add_time' => $add_time));

// 查詢

$user_id = "17474#";

// $password = "''or '1=1'";

$password = 123456;

$sql = 'select * from post_tbl where user_id = :x_user_id and password = :x_password';

$stmt = $dbh->prepare($sql);

$stmt->execute(array(':x_user_id'=>$user_id, ':x_password' => $password));

$rows = array();

while($row = $stmt->fetch(pdo::fetch_assoc))

$rows = $row;

print_r($rows);

// echo $dbh->lastinsertid();

mysql 網路安全性 MySQL安全性指南(1)

作為乙個mysql的系統管理員,你有責任維護你的mysql資料庫系統的資料安全性和完整性。本文主要主要介紹如何建立乙個安全的mysql系統,從系統內部和外部網路兩個角度,為你提供乙個指南。為什麼安全性很重要,你應該防範那些攻擊?伺服器面臨的風險 內部安全性 如何處理?連線伺服器的客戶端風險 外部安全...

mysql 網路安全性 MySQL安全性指南(3)

2.4 不用grant設定使用者 當你發出一條grant語句時,你指定乙個使用者名稱和主機名,可能還有口令。對該使用者生成乙個user表記錄,並且這些值記錄在user host和password列中。如果你在grant語句中指定全域性許可權,這些許可權記錄在記錄的許可權列中。其中要留神的是grant...

mysql 安全性語言實驗 MySQL安全性語言

實驗2 安全性語言 安全性實驗包含兩個實驗專案,其中1個為必修,1個為選修。自主訪問控制實驗為設計型實驗專案,審計實驗為驗證型實驗專案,選做乙個即可。實驗2.1自主訪問控制實驗 1 實驗目的 掌握自主訪問控制許可權的定義和維護方法。2 實驗內容和要求 定義使用者 角色,分配許可權給使用者 角色,許可...