簡體   English   中英

如何清理用戶提交的mysql查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM