2013-04-25 68 views
0

我搜索了周圍和found a way to do exactly this。但我很猶豫,因爲我偶爾會讀到它的"security risk"。不幸的是,沒有人詳細說明原因。就我個人而言,我不能想到任何安全風險都不會涉及到攻擊者已經擁有他們不應該擁有的權限。 MySQL/PHP服務器在同一臺機器上運行。所以MySQL和PHP之間沒有公共請求。使用MySQL觸發器執行PHP有哪些安全風險?

觸發的PHP腳本將對第三方CRM/ESP上的Web服務進行API調用,該服務在其服務器上保留某些表的簡化版本。然後,我們的營銷團隊可以登錄CRM的GUI,發送電子郵件,收集信息並計劃營銷活動,而無需打擾開發團隊。

該服務器上的表不會鏡像我們的,它們只包含他們需要的信息。我想使用觸發器的原因是儘可能保持其信息最新,並將邏輯放在一個地方,而不是分散在整個項目中。

更新: 我總是清理/驗證任何與MySQL接觸的表單。我從不在我的表格中存儲PHP。我從來不使用FTP(使用.pem而不是密碼的SFTP)。 將執行的腳本將是我創建的單個文件,不會改變哪個文件正在經歷我使用的相同框架(zend)。傳遞給腳本的唯一變量將是行的id(它將被驗證爲INT)。 我正在考慮不這樣做,因爲性能。並且讓PHP異步執行是可能的,但是很困難並​​且不值得我的時間去實現。但我仍然很好奇,除了性能損失之外,安全問題與說網絡服務有什麼不同?我的意思是你必須像使用Web服務一樣進行清理/驗證,所以考慮到這一點,會出現什麼問題?

+2

這是一個安全風險,因爲它可以執行任意代碼。該代碼可以執行任何操作,直至幷包括DROP TABLE STUDENTS。通過在線路上發送代碼來構建應用程序聽起來像是一個非常糟糕的主意,而且無論如何您並不需要它。 – 2013-04-25 18:11:14

回答

0

您的應用程序可能會受到不同的破壞方式,例如SQL注入,嗅探的FTP密碼或代碼本身的漏洞。儘量保持這些東西儘可能局部化以防止一個地區的突破層出不窮,這通常是一個好主意。

例如,假設您將敏感數據存儲在數據庫中。通常情況下,您會以某種方式加密這些數據,使用未存儲在數據庫本身中的鹽和密鑰。然後,如果您的數據庫受到SQL注入的攻擊,攻擊者可能會造成損害,但他們將無法竊取敏感信息。但是,如果您在數據庫中執行以文本形式存儲的PHP,攻擊者一定會意識到這一點並更新它來執行他的代碼,從中他們可以弄清楚如何加密敏感數據並對其進行解密。

簡而言之,SQL注入是非常普遍的(即使你遵循最佳實踐,沒有人會說明年的實習生會這麼做),因此執行存儲在數據庫中的代碼並不安全。

編輯:在仔細閱讀你的鏈接之後,我需要重申一些東西。我沒有看到這方面的安全風險,但這似乎與數據和邏輯的分離確實相抵觸。此外,mysql不是異步的,並且在負載下無法進行縮放......

+0

我不知道如何選擇這個,但是這回答了我的問題。 – user2188915 2013-05-02 19:00:55

相關問題