2011-10-27 81 views
1

我已經閱讀了許多有關轉義字符和消毒用戶輸入的論壇(和堆棧溢出)的帖子,但我想將它們結合在一起,並使其更加專用於Android平臺。這是我的情況:安全的用戶輸入

我有一個Android應用程序通過SOAP XML消息與Web服務進行通信。下面是可能會發送(我要離開了它周圍的SOAP信封)樣本XML消息:

<Log> 
    <Summary>user entered text</Summary> 
    <Details>user entered text</Details> 
</Log> 

正如你所看到的,有2個地方,用戶可以在表單中輸入文本,然後插入到這個消息被髮送到Web服務。我需要:
A)確保它是有效的XML和
B)確保它不包含任何惡意SQL內容。

Android API中是否有預包含的實用程序來轉義用戶可能已輸入的無效XML字符(如&)? (所以,我可以簡單地說「escapeXML(xmlstring);」或類似的東西)

有什麼辦法檢查惡意SQL(或其他代碼注入)或應該在服務器端處理?作爲一個方面說明:我更喜歡用戶只能輸入A-Z,0-9和基本標點符號(以避免奇怪的unicode字符,甚至有時甚至無法看到或解釋)。有沒有一種很好的方法來將用戶輸入限制爲一個字符子集?

我知道這是一個問題,所以如果你只知道它的一部分,無論如何請提供一個答案,我會樂意接受它。在此先感謝您的幫助! (StackOverflow是當我消耗太多論壇線程並且已經讓我自己都扭曲了什麼在我的情況下適當的東西時來到的地方)

+1

我想你可能可以限制它與正則表達式,但我不會。首先,以這種方式進行限制完全不能防止注射(所有你需要的是基本的標點符號)。其次,如果您的任何用戶正在使用外來字符集(或者甚至試圖正確地輸入外來貸款單詞),那麼如果他們的輸入被拒絕,可能會有些惱火。通常你不應該存儲格式化的XML存儲實體(類實例)。參數化查詢應該關注SQL注入 - 您也需要在此注意跨站點腳本。 –

+0

嗯,我知道我們不會處理外來詞的問題,因爲它是一個爲特定客戶端定製的應用程序,只能在美國工作。另外,我並沒有想過限制對文本,數字和標點符號的輸入會阻止SQL注入,而是會保持文本閱讀器友好的(因爲頭腦不知道如何「讀取」控制字符,例如) –

+0

不知道你的客戶,我不能肯定地說,但你可能會比你意識到的更頻繁地使用外來詞(即使你沒有正確地拼寫)。即使您的客戶只在美國工作(更多取決於域名/位置)。通常,在處理SOAP時,您正在使用一些將消息序列化/反序列化的框架/庫 - 您的代碼甚至不一定知道它來自XML消息(可能不應該)。有幾個Java,不知道一個Android特定的版本。 –

回答

3

處理SQL Injection的最佳方式是使用參數化查詢。這是在服務器端完成的。其他一切都是次要的,不必要的或者幾乎不能抓住問題的表面。

你應該閱讀這些:

傑夫·阿特伍德的博客,我喜歡在那裏,他說:

非parameteriz ed SQL是數據庫編程的GoTo語句。

+0

作爲一個狂熱的GoTo討厭自己,我可以肯定地意識到並將研究我們可以在服務器端做什麼(Web服務連接到IBM Maximo資產管理系統,所以我可能會受到限制,或者它可能已經爲我們做了) –