[英]How do I escape SQL query's single quotes for query generated in javascript/jquery in cartodb database?
我使用javascript / jquery生成一個SQL查詢。 我有一個sql查詢我正在javascript / jquery腳本中生成和使用。
像這樣的東西:
var storeName;
var query = "SELECT * FROM stores where storeName = '" + storeName + "';";
(當用戶從html中選擇時, storeName
是通過jquery生成的)
因此當storeName
類似於“Jackson Deli”時 ,查詢運行得很好。
但是,當storeName
是“傑克遜的熟食店”時,它不起作用,似乎是因為傑克遜的撇號被視為結束語。 我知道如果我對查詢進行硬編碼,我可以通過加倍來引用它...所以
SELECT * FROM stores where storeName = 'Jackson''s Deli';
應該管用。 但我不是硬編碼查詢。 相反,它是由用戶輸入生成的,名稱中可能有也可能沒有撇號。 在這種情況下,我該如何逃避'
這個角色? 我需要它在Javascript / jquery中工作。
我是否需要編寫一個if語句來查找'
在storeName
並用''
替換它''
? 或者還有另一種方法可以解決這個問題嗎?
編輯:哎喲! 通常,是的,我意識到在客戶端生成查詢的危險。
所以這里有更多的背景。 我正在使用cartodb並關注他們的文檔。 這里有一個例子來自他們的回購做類似我正在談論的事情(他們也有其他例子):
https://github.com/CartoDB/cartodb.js/blob/develop/examples/layer_selector.html
您無法在cartodb中運行允許您以任何方式修改數據的查詢 - 您只能運行允許您檢索數據的查詢。 所以我還在考慮逃避這個引用角色的最佳方法是什么。
話雖這么說,如果您打算使用動態查詢,最好轉義用戶輸入並將其綁定到服務器端的預准備語句。
如果您發布有關哪個數據庫(MySQL,Postgres等)以及您用於服務器處理的語言的更多詳細信息,您將獲得更好的答案。
是的......我完全清楚這不回答這個問題。 但是,沒有人應該以這種方式創建代碼。
編輯:強調警告更大。
我看到其他人已經回答,但我想從幾個角度來處理這個問題。
你問的問題很好。 您認識到SQL不適用於單引號。 你意識到需要逃避某些事情。 這些是一些很好的起點,可以幫助您以安全和可維護的方式構建軟件。
永遠不要直接執行客戶端代碼/內容 - 從客戶端生成SQL或任何類型的代碼/指令(javascript,字節碼,編譯代碼)總是一個糟糕的主意,因為它打破了一些關鍵概念。
從壞人的角度來看待你的軟件開發 - 而不是“如何逃避這個字符串以使其發揮作用”。 嘗試“如何繞過此頁面上的轉義,以允許我刪除記錄,查看我應該做的事情等。
不要因為方法錯誤而感到難過 ,要從中吸取教訓。 我看到很多關於你永遠不應該這樣做的評論(而且他們是對的)但是我們很多人都很難學到這一課。 我們嘲笑Little Bobby Tables,因為我們都寫過或者不得不支持執行此操作的代碼。 關鍵是要理解為什么這是一個壞主意的基礎,然后在設計軟件時使用它。 歡迎來到學校的艱難時刻。 我們都是畢業生,謝天謝地,你可以從我們的評論中學習,而不是當有人修飾,腐蝕,刪除或滲透你的數據庫和應用程序時。
為了讓您開始這個旅程,我建議您閱讀以下內容: SQL注入說明
並作為額外的獎勵XSS例如逃避源自外部系統或人的OUTPUT。 例如,包含Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
的評論條目Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
所以當你輸出它時你會得到
Comments:Hi!!! <script>alert('Thanks to this site not escaping this output I get to run this code under your login. Thanks for the 4000 crates of free tshirts you just ordered for me');</script> how are you???
哪個是“有效”HTML,瀏覽器會執行它。
最后的想法 - 采用座右銘信任但驗證 ,你會沒事的
僅供參考,CartoDB不允許您執行更改表中某些內容的查詢,它是只讀的。
首先將數據發送到服務器,然后使用addslashes()命令轉義需要轉義的所有字符(假設您使用的是PHP)。
完成簡化字符后,您可以使用API和API密鑰將數據發送到cartoDB。
cartoDB確實通過其SQL API提供插入/更新/刪除任務。 看到這個鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.