目錄
回覆內容:
首頁 後端開發 php教程 addslashes()用途與php怎樣防止mysql注入?

addslashes()用途與php怎樣防止mysql注入?

Aug 04, 2016 am 09:21 AM
mysql php sql sql注入 注入

1.表單資料
addslashes()用途與php怎樣防止mysql注入?
顯示的是表單的資料

2.php的抓取的表單資料
addslashes()用途與php怎樣防止mysql注入?
已經自動加了

3.mysql資料 (最下面一行)
addslashes()用途與php怎樣防止mysql注入?
寫到mysql中居然沒有

4.懷疑是被mysql軟體隱藏掉了,進命令列看看:
addslashes()用途與php怎樣防止mysql注入?
也沒看到

依照官方的說法
http://www.php.net/manual/zh/function.addslashes.php

一個使用 addslashes() 的範例是當你要往資料庫輸入資料時。 例如,將名字 O'reilly 插入到資料庫中,這就需要對其進行轉義。 強烈建議使用 DBMS 指定的轉義函數 (例如 MySQL 是 mysqli_real_escape_string(),PostgreSQL 是 pg_escape_string()),但如果你使用的 DBMS 沒有一個轉義函數,並且使用 來轉義特殊字元,你可以使用這個函數。 只是為了獲取插入資料庫的數據,額外的 並不會插入。 當 PHP 指令 magic_quotes_sybase 被設定成 on 時,表示插入 ' 時將使用 ' 進行轉義。

問題:
1.addsleshes()函數在起到防止注入的作用時,是怎樣一種機制?
2.stripslashes()在什麼情況下使用?
3.對表單提交過來的資料直接用htmlspecialchars( )轉義處理並存入資料庫,是不是更好?
4.好是的防止sql注入的方式是怎樣的?

.

回覆內容:

1.表單資料
addslashes()用途與php怎樣防止mysql注入?
顯示的是表單的資料

2.php的抓取的表單資料
addslashes()用途與php怎樣防止mysql注入?
已經自動加了

3.mysql資料 (最下面一行)
addslashes()用途與php怎樣防止mysql注入?
寫到mysql中居然沒有

4.懷疑是被mysql軟體隱藏掉了,進命令列看看:
addslashes()用途與php怎樣防止mysql注入?
也沒看到

依照官方的說法
http://www.php.net/manual/zh/function.addslashes.php

一個使用 addslashes() 的範例是當你要往資料庫輸入資料時。 例如,將名字 O'reilly 插入到資料庫中,這就需要對其進行轉義。 強烈建議使用 DBMS 指定的轉義函數 (例如 MySQL 是 mysqli_real_escape_string(),PostgreSQL 是 pg_escape_string()),但如果你使用的 DBMS 沒有一個轉義函數,並且使用 來轉義特殊字元,你可以使用這個函數。 只是為了獲取插入資料庫的數據,額外的 並不會插入。 當 PHP 指令 magic_quotes_sybase 被設定成 on 時,表示插入 ' 時將使用 ' 進行轉義。

問題:
1.addsleshes()函數在起到防止注入的作用時,是怎樣一種機制?
2.stripslashes()在什麼情況下使用?
3.對表單提交過來的資料直接用htmlspecialchars( )轉義處理並存入資料庫,是不是更好?
4.好是的防止sql注入的方式是怎樣的?

.

如文檔上寫的呀,addslashes就是為參數的引號前加了個斜杠。
也如你所印製的數據,參數前也有斜線。
但是資料庫裡就不應該有斜槓呀!
addslashes是如何防注入的,就是防止在我們寫SQL時直接套用輸入參數而導致產生可被注入的SQL來防注入的。
例如$sql = "SELECT * FROM user WHERE id = '$id'";,如果這裡的$id參數被人故意操作成了1' OR '1 = 1',那不就成了注入SQL了嗎?
而如果用addslashes加上斜杠,$id中的引號就會被轉意,也就不會產生錯誤的SQL。但這些結果都不會影響到資料寫入,因為當真正插入和更新資料時,這些斜槓又會被轉意回來的。

防禦SQL注入(輸入資料庫):
PDO bindParam 或mysqli_stmt_bind_param: 避免SQL注入.
addslashes: 用反斜杠轉義所有的單引號,雙引號,反斜杠和NUL's,一定程度上避免注入.
SQL.
SQL mysqli_real_escape_string: 轉義SQL語句中的特殊字元.
有了bind_param,就不需要使用addslashes,mysqli_real_escape_string,magic_quotes_gpc這些功能了.

例如:🎜
<code>PDO MySQL:
//方法1(问号占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
$stmt->execute(array($title,$content,$id)); //所有值视作PDO::PARAM_STR处理

//方法2(命名占位符)
$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
$stmt->execute(array(':title' => $title,':content' => $content,':id' => $id)); //所有值视作PDO::PARAM_STR处理

//方法3
$stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
$stmt->bindParam(1, $title,   PDO::PARAM_STR);
$stmt->bindParam(2, $content, PDO::PARAM_STR);
$stmt->bindParam(3, $id,      PDO::PARAM_INT);
$stmt->execute();

//方法4
$stmt = $db->prepare('UPDATE posts SET post_title = :title, post_content = :content WHERE id = :id');
$stmt->bindParam(':title',   $title,   PDO::PARAM_STR);
$stmt->bindParam(':content', $content, PDO::PARAM_STR);
$stmt->bindParam(':id',      $id,      PDO::PARAM_INT);
$stmt->execute();

MySQLi:
//MySQLi只需执行一次bind_param,要比PDO简洁一些,MySQLi不支持命名占位符.
$stmt->bind_param('ssi', $title, $content, $id);</code>
登入後複製

你說的htmlspecialchars是在輸出HTML時防禦XSS攻擊的,區別於上面說的防禦SQL注入.

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP的未來:改編和創新 PHP的未來:改編和創新 Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

php:死亡還是簡單地適應? php:死亡還是簡單地適應? Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 如何將 AWS Glue 爬網程序與 Amazon Athena 結合使用 Apr 09, 2025 pm 03:09 PM

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。

phpmyadmin連接mysql phpmyadmin連接mysql Apr 10, 2025 pm 10:57 PM

如何使用 phpMyAdmin 連接到 MySQL?訪問 phpMyAdmin 的 URL,通常為 http://localhost/phpmyadmin 或 http://[您的服務器 IP 地址]/phpmyadmin。輸入您的 MySQL 用戶名和密碼。選擇您要連接的數據庫。點擊 "連接" 按鈕以建立連接。

See all articles