污點檢驗

污點檢驗是某些程式語言所擁有的特性,例如PerlRuby,可用於增加安全性和避免惡意用戶在主機上執行命令。污點會檢驗突出的安全風險,一般來說這些風險與那些使用SQL注入緩衝區溢出攻擊的網站相關。

基本介紹

  • 中文名:污點檢驗
  • 定義:某些程式語言所擁有的特性
  • 領域:計算機
  • 結果:突出的安全風險
簡介,例子,歷史,

簡介

污點檢驗的原理是任何變數(例如在網頁表單區域的一個變數集)能夠被外部用戶修改,從而造成了潛在的安全危險。如果該變數被一個表達式賦值給第二個變數,那么第二變數也是可疑的。污點檢驗工具在變數間傳遞運行,直到外部輸入潛在地影響到所有的變數。如果這些變數中任何一個變數被用於執行危險命令(例如對SQL資料庫或主機作業系統的直接命令),污點檢檢驗工具將警告該程式正在使用有潛在危險的污點變數。程式設計師可以通過重新設計程式來避免因危險的輸入而導致的安全問題。
污點檢驗能夠被視為一個無界面全面驗證的保守近似或者是更一般化的安全信息流概念。因為系統中的信息流不能通過檢驗一個簡單的執行追蹤而被驗證,污點分析的結果將必然地反映關於該系統信息流特徵的近似信息。

例子

以下危險的Perl代碼在沒有檢驗$name變數的值情況下,啟動了一個大型SQL注入漏洞:
#!/usr/bin/perlmy $name = $cgi->param("name");  # Get the name from the browser...$dbh->TaintIn = 1;$dbh->execute("SELECT * FROM users WHERE name = '$name';"); # Execute a SQL query
如果開啟污點檢驗,那么Perl將會拒絕運行命令,顯示錯誤信息並退出,因為一個污點變數正在SQL查詢中被使用。沒有污點檢驗,用戶能進入foo'; DROP TABLE users --,因此運行命令將刪除全部的資料庫表。更安全的方法是將$name的污點值編碼到一個SQL字元串字面值和使用SQL查詢的結果,這保證了沒有嵌入在$name的危險命令會被執行。另一方法是使用預處理語句去淨化所有變數輸入。
需要注意的是Perl DBI需要設定資料庫句柄的TaintIn屬性,才允許污點模式去檢驗該SQL字元串。

歷史

Perl從至少1989年當T switch加入到Perl 3的時候開始支持污點化。
在1996年,網景同時在網景通訊伺服器的伺服器端JavaScript和客戶端的網景瀏覽器3上實現數據污點化。然而,自從客戶端支持被當作實驗性功能,該功能被禁用(要求用戶手動激活),而且需要頁面作者修改腳本才能使用。而其他瀏覽器從未實現這個功能,通訊伺服器也沒有大體完成,微軟後來成了新的網際網路信息提供商。

相關詞條

熱門詞條

聯絡我們