2013-08-23 113 views
0

我在我的網上商店使用在線照片編輯器。用戶可以使用svg-edit編輯照片並保存更改。用戶結果存儲爲SVG源代碼(...)。我必須通過PHP表單發送SVG源代碼,將其保存在數據庫中並顯示在管理面板中。通過PHP表單的SVG源代碼

我怕在我的網上商店發生任何打針或攻擊。有沒有可能使其安全?

我無法爲SVG源代碼生成私有哈希,因爲它是客戶端,我可以通過AJAX創建任何請求。

@EDIT

實施例:用戶保存...代碼和代碼正在通過POST發送。在PHP腳本中,我可以訪問$ svg = $ _POST ['svg_source'];我很擔心這個POST值會導致注入。攻擊者可能會注入任何HTML,JS,其他源代碼。

@EDIT:

然後在DB我可以存儲$ _ POST價值......並查看它在PA。但是,攻擊者可以寫一些...代碼,它會在PA,我查看SVG圖像(基於SVG代碼)執行

@EDIT:

我需要一些解決方案來檢查SVG碼是有效的並且不包含任何JS,HTML代碼。或者 - 我需要一些解決方案來安全地查看網站上的SVG代碼。

+0

什麼樣的注射?的sql? CSS/HTML嗎? SVG?如果你使用適當的防禦性編程技術,你根本不應該擔心注入攻擊。 –

+0

示例:用戶保存 ...代碼並且該代碼正通過POST發送。在PHP腳本中,我可以訪問$ svg = $ _POST ['svg_source'];我很擔心這個POST值會導致注入。攻擊者可能會注入任何HTML,JS,其他源代碼。 –

+0

和那有什麼問題?任何用戶通過表單提交的數據都會顯示在_GET或_POST中... –

回答

0

考慮在將用戶輸入存儲到數據庫中之前用類似mysql_escape_string()的東西包裝用戶輸入。就SQL注入攻擊而言,這會給你一些緩解。

就HTML/JavaScript注入而言,您需要做的是根據W3標準驗證SVG文件。我做了快速搜索,並發現這一點:

Sanitizing SVG using PHP

導致這些: http://us3.php.net/manual/en/domdocument.schemavalidate.phphttp://us3.php.net/manual/en/domdocument.validate.php

我希望這是有幫助的。

編輯:

如在下面的意見建議,您可以通過白名單隻有你認爲是安全的要素解析SVG文件。看起來已經有一個很好的帖子涵蓋了這個:

Sanitizing an SVG document by whitelisting elements

+0

由於SVG可以有[嵌入式JavaScript](http://www.w3.org/TR/SVG/script.html#ScriptElement)並且仍然有效,並且允許在您的站點上執行任意Javascript實際上是定義XSS ...根據W3C標準進行驗證不會對XSS進行防禦。 – Quentin

+0

@Quentin - 是的 - 好點。我猜想需要解析SVG並消除任何