2013-04-25 89 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

相关问题