SQL注入是什麼?如何防止?

2021-01-08 php中文網

SQL注入是一種注入攻擊,可以執行惡意SQL語句。下面本篇文章就來帶大家了解一下SQL注入,簡單介紹一下防止SQL注入攻擊的方法,希望對大家有所幫助。

什麼是SQL注入?

SQL注入(SQLi)是一種注入攻擊,,可以執行惡意SQL語句。它通過將任意SQL代碼插入資料庫查詢,使攻擊者能夠完全控制Web應用程式後面的資料庫伺服器。攻擊者可以使用SQL注入漏洞繞過應用程式安全措施;可以繞過網頁或Web應用程式的身份驗證和授權,並檢索整個SQL資料庫的內容;還可以使用SQL注入來添加,修改和刪除資料庫中的記錄。

SQL注入漏洞可能會影響使用SQL資料庫(如MySQL,Oracle,SQL Server或其他)的任何網站或Web應用程式。犯罪分子可能會利用它來未經授權訪問用戶的敏感數據:客戶信息,個人數據,商業機密,智慧財產權等。SQL注入攻擊是最古老,最流行,最危險的Web應用程式漏洞之一。

SQL注入攻擊的類型

SQL注入攻擊可以通過多種方式執行。在選擇特定攻擊方法之前,攻擊者可能會觀察系統的行為。

帶內注入

這是典型的攻擊,攻擊者可以通過相同的通信通道發起攻擊並獲得結果。這是通過兩種帶內技術完成的:

● 基於錯誤的SQL注入:從顯示的錯誤消息中獲取有關資料庫的信息

● 基於聯合的SQL注入:依賴於攻擊者能夠將UNION ALL被盜信息的結果與合法結果連接起來。

這兩種技術都依賴於攻擊者修改應用程式發送的SQL,以及瀏覽器中顯示的錯誤和返回的信息。如果應用程式開發人員或資料庫開發人員無法正確地參數化他們在查詢中使用的值,那麼它會成功。兩者都是試錯法,可以檢測到錯誤。

盲注入

也稱為推理SQL注入,盲注入攻擊不會直接從目標資料庫中顯示數據;相反,攻擊者會仔細檢查行為中的間接線索。HTTP響應中的詳細信息,某些用戶輸入的空白網頁以及資料庫響應某些用戶輸入需要多長時間,這些都可以是線索,具體取決於攻擊者的目標。他們還可以指向攻擊者嘗試的另一個SQLi攻擊途徑。

帶外注入

這種攻擊有點複雜,當攻擊者無法在單個直接查詢 - 響應攻擊中實現其目標時,攻擊者可能會使用此攻擊。通常,攻擊者會製作SQL語句,這些語句在呈現給資料庫時會觸發資料庫系統創建與攻擊者控制的外部伺服器的連接。以這種方式,攻擊者可以收集數據或可能控制資料庫的行為。

二階注入就是一種帶外注入攻擊。在這種情況下,攻擊者將提供SQL注入,該注入將由資料庫系統的單獨行為存儲和執行。當二級系統行為發生時(它可能類似於基於時間的作業或由其他典型管理員或用戶使用資料庫觸發的某些事情)並且執行攻擊者的SQL注入,那就是當「伸出」到系統時攻擊者控制發生了。

如何防止SQL注入攻擊?

以下建議可以幫助防止SQL注入攻擊成功:

不要使用動態SQL

避免將用戶提供的輸入直接放入SQL語句中;最好使用準備好的語句和參數化查詢,這樣更安全。

不要將敏感數據保留在純文本中

加密存儲在資料庫中的私有/機密數據;這樣可以提供了另一級保護,以防攻擊者成功地排出敏感數據。

限制資料庫權限和特權

將資料庫用戶的功能設置為最低要求;這將限制攻擊者在設法獲取訪問權限時可以執行的操作。

避免直接向用戶顯示資料庫錯誤

攻擊者可以使用這些錯誤消息來獲取有關資料庫的信息。

對訪問資料庫的Web應用程式使用Web應用程式防火牆(WAF)

這為面向Web的應用程式提供了保護,它可以幫助識別SQL注入嘗試;根據設置,它還可以幫助防止SQL注入嘗試到達應用程式(以及資料庫)。

定期測試與資料庫交互的Web應用程式

這樣做可以幫助捕獲可能允許SQL注入的新錯誤或回歸。

將資料庫更新為最新的可用修補程序

這可以防止攻擊者利用舊版本中存在的已知弱點/錯誤。

總結:SQL注入是一種流行的攻擊攻擊方法,但是通過採取適當的預防措施,例如確保數據加密,保護和測試Web應用程式,以及您是最新的補丁程序,您可以採取有意義的步驟來保持您的數據安全。

以上就是什麼是SQL注入?如何防止SQL注入攻擊?的詳細內容,更多請關注php中文網其它相關文章!

相關焦點

  • SQL注入、XSS以及CSRF分別是什麼?
    什麼是SQL注入、XSS和CSRF?本篇文章就來帶大家了解一下SQL注入、XSS和CSRF,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQL注入SQL注入是屬於注入式攻擊,這種攻擊是因為在項目中沒有將代碼與數據(比如用戶敏感數據)隔離,在讀取數據的時候,錯誤的將數據作為代碼的一部分執行而導致的。典型的例子就是當對SQL語句進行字符串拼接的時候,直接使用未轉義的用戶輸入內容作為變量。這時,只要在sql語句的中間做修改,比如加上drop、delete等關鍵字,執行之後後果不堪設想。
  • Java最新SQL注入原因以及預防方案(易理解)
    前沿在現有的框架中sql防注入已經做得很好了,我們需要做的就是儘量不要使用sql拼接調用java sql注入原因以及預防方案(易理解)SQL注入1.1 原理SQL注入是通過客戶端的輸入把SQL命令注入到一個應用的資料庫中,從而執行惡意的SQL語句。1.2 演示1.2.1 案例1有一個登錄框,需要 輸入用戶名和密碼 ,然後我們的密碼輸入 'or '123' = '123 這樣的。
  • 安全漏洞XSS、CSRF、SQL注入以及DDOS攻擊
    3、防止CSRF的解決方案 重要數據交互採用POST進行接收,當然是用POST也不是萬能的,偽造一個form表單即可破解。 使用驗證碼,只要是涉及到數據交互就先進行驗證碼驗證,這個方法可以完全解決CSRF。 但是出於用戶體驗考慮,網站不能給所有的操作都加上驗證碼。因此驗證碼只能作為一種輔助手段,不能作為主要解決方案。
  • 最詳細的SQL注入相關的命令整理
    /display.asp,行177、 列出當前所有的資料庫名稱:select * from master.dbo.sysdatabases 列出所有列的記錄select name from master.dbo.sysdatabases 僅列出name列的記錄8、 不需xp_cmdshell支持在有注入漏洞的SQL伺服器上運行CMD命令:create
  • 使用exp進行SQL報錯注入 - 51CTO.COM
    mysql> select exp(2.70805020110221);+---+| exp(2.70805020110221) |+---+|                    15 |+---+1 row in set (0.00 sec)0x02 注入
  • sqltoy-orm-4.16.11 發版,部分功能優化
    的十四個關鍵特點:1、最簡最直觀的sql編寫方式(不僅僅是查詢語句),採用條件參數前置處理規整法,讓sql語句部分跟客戶端保持高度一致2、sql中支持注釋(規避了對hint特性的影響,知道hint嗎?搜oracle hint),和動態更新加載,便於開發和後期維護整個過程的管理3、支持緩存翻譯和反向緩存條件檢索(通過緩存將名稱匹配成精確的key),實現sql簡化和性能大幅提升4、支持快速分頁和分頁優化功能,實現分頁最高級別的優化,同時還考慮到了cte多個with as情況下的優化支持5、支持並行查詢6、根本杜絕sql注入問題,以後不需要討論這個話題7、支持行列轉換
  • 大數據分析工程師入門9-Spark SQL
    你該了解的Spark SQL簡單入門操作不得不說的數據源一你該了解的Spark SQL1.什麼是組件的可擴展性支持多語言開發:Scala、Java、Python、R兼容Hive3.Spark SQL可以做什麼
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    在繼續之前,一定要考慮如何在pandas中做這樣的事情。pandas的解決方案那麼在pandas身上該怎麼做呢?pandas肯定可以解決這個問題,儘管我認為它的可讀性不夠。讓我們從生成一些要處理的隨機數據開始。
  • MyBatis dynamic SQL 1.1.4 發布,生成動態 SQL 的框架
    此版本包含兩項增強功能: 支持在計數、刪除、選擇和更新語句之間共享 where 子句 改進 Kotlin DSL - 刪除了一些引起歧義的擴展方法,並添加了自定義構建器以及一項 bug 修復: 修復了以下錯誤:在子查詢中首先使用限制/偏移/獲取會導致參數名稱衝突完整更新內容可查看:https://github.com/mybatis/mybatis-dynamic-sql
  • Mybatis中SqlSource解析流程詳解
    前面幾篇文章都在詳細分析mapper的加載過程,但是始終沒有看到sql的解析過程,今天來詳細分析下。大的方向梳理了我們再來看這個方法到底在幹什麼,首先這個方法會收集SqlNode對象放到contents集合中,最後把contents作為參數生成MixedSqlNode對象。
  • SQL語句性能調整之ORACLE的執行計劃
    如何產生執行計劃  要為一個語句生成執行計劃,可以有3種方法:  1).最簡單的辦法  Sql> set autotrace on  Sql> select * from dual;  執行完語句後,會顯示explain
  • MyBatis Dynamic SQL 1.0.0,生成動態 SQL 語句的框架
    Maven 使用<dependency>  <groupId>org.mybatis.dynamic-sql</groupId>  <artifactId>mybatis-dynamic-sql</artifactId>  <version>1.0.0</version><
  • c使用sql server專題及常見問題 - CSDN
    為php添加 sqlsrv 擴展去微軟官網 https://www.microsoft.com/en-us/download/ 搜索php ,點擊 Microsoft Drivers for PHP for SQL Server 下載最新版的 sqlsrvXX.exe( 我下載的是SQLSRV32.EXE )運行解壓, 得到一堆DLL, 選取適合自己
  • 這個函數讓SQL效率提升99%
    window_aggregate_function_before2008本文項目地址:https://github.com/firewang/sql50參考網址:https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-over-clause-transact-sql?
  • 請確保你查詢mysql資料庫時,sql語句沒有這麼寫_手機網易網
    2020-11-23 19:20:11 來源: 小燕愛生活 舉報   資料庫索引,可以讓查詢sql
  • server sql 作業 使用專題及常見問題 - CSDN
    use masterGO/* --開啟sql server代理sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO*/--定義創建作業
  • SQL Server 首次登陸 Linux 平臺
    更多細節,見 SQL Server 官方:https://www.microsoft.com/en-us/sql-server/sql-server-2017參考:VentureBeta、SQL Server看完本文有收穫?
  • 如何在Python中重寫SQL查詢?
    SELECT,WHERE,OR,AND,IN(有條件選擇)現在你知道了如何以簡單的方式探索數據框架,接著來嘗試一些條件吧(在SQL中是WHERE子句)。如果只想從數據框架中選擇特定的列,則可以使用另一對方括號進行選擇。注意,如果要選擇多列,則需要在方括號內放置數組[「 name」,「 age」]。isin()與SQL中的IN完全相同。
  • PL/SQL 之 記錄類型和索引表
    SCOTT@SDEDU> ed11303.sqldeclare    type dept_type is record(    deptno dept.deptno%type:=80,    dname dept.dname%type,    loc dept.loc%type);
  • PL/SQL中如何導出表結構和表數據
    如圖再點擊【Tools】選項,再在列表中選中【Export User Objects】選項,就會跳轉到表結構導出界面,如圖如果想導入資料庫表結構,或表數據,也可以再點擊【Tools】中的【Import Tables】選項,會跳轉到導入數據表界面和導入數據表結構界面,如圖在該界面中,切換到【SQL inserts】選項,在下方文件打開按鈕中,選中已經準備好的sql