[英]How to sanitize user-submitted mysql queries
我以前從未問過一個問題,因為我總是總是在這里或在nixcraft中找到需要的東西。
我希望對僅由組織內部技術人員使用的應用程序提供一些指導。 他們需要能夠查詢數據庫,但是由於信息的敏感性,我們不希望他們能夠導出數據轉儲。 我確定還需要注意其他風險,但實際上不確定這些風險可能是什么。 我能想到的唯一清除方法是檢查sql語法問題,並防止任何會產生數據轉儲的語句。
該腳本將用PHP編寫,而無需任何外部庫。 數據庫權限將限制為SELECT,因此將不會進行更新,插入,刪除等操作。我們將無法利用PDO准備的語句,因為我們的用戶將自始至終輸入整個SQL查詢。
您的任何想法將不勝感激。
您可以限制查詢將用作用戶提供的數據的字段,並首先通過mysqli_real_escape_string運行它們。
假定您只公開了一個包含希望他們搜索的字段的表單,而不是允許他們輸入完整查詢的表單。
高溫超導
如果您允許用戶僅對SELECT
輸入整個查詢,請不要。 這將是一場安全噩夢。
相反,請使用PDO的准備工作並允許用戶進行高級搜索。 否則,將需要AI的消毒水平,如果您正在這樣做,則不會問這個問題。
相反,問問自己,記錄搜索需要什么邏輯。 您需要搜索多個字段嗎? 如果需要聯接,則在獲取記錄時可以隱式(自動)將表聯接在一起。
您也可以使用參數的LIMIT
,分頁,和各樣的事情的形式
基本要點是: 如果用戶可以編寫SQL查詢,則最好給他們登錄SQL控制台,然后忽略所有清理操作 。 當用戶編寫自己的查詢時,對輸入進行清理會很奇怪,並且可能導致查詢甚至無法運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.