我在现有网站上进行了支付网关集成。支付网关给了我一个API,我用它并编码并将其存储在php文件中pay.php
我在主网站上有一个结帐表单,点击提交后,它会通过pay.php
将所有需要的数据发送到post
,然后此文件会完成剩下的工作并将数据发送到付款网关。
由于这个pay.php
文件存储了感知数据,因此我想保护它,以便其他任何人都无法通过网络brwoser访问它,例如输入http://domain.com/pay.php
或者能够下载它。
现在我知道通常你不能只下载.php
个文件,我前几天看到一个网站能够下载我的wordpress博客和.php
个文件。
每次运行pay.php
文件时都会生成付款链接,因此我需要确保只有网站http://www.domain.com
能够使用此文件而不能使用第三方。
我脑子里已经有了一些想法,比如使用远程IP等来限制访问,但是想知道解决问题的最佳方法。
答案 0 :(得分:2)
添加Commusoft的答案,并提供一个轻微的替代方案。
这段.htaccess
通过浏览器拒绝php文件请求,并确保你只能包含来自不同php文件的文件。
<Files *.php>
Deny from All
</Files>
将其放在pay.php
所在的单独目录中。
我认为处理此付款问题的最佳方法是将pay.php
转换为完整的类并使用面向对象。这样,您就可以在任何位置使用该功能并轻松地将变量传递给它。
答案 1 :(得分:1)
.htaccess
配置它。并且用户不会知道您的真实PHP文件。答案 2 :(得分:0)
如果您正确配置了您的网络服务器(Apache,...),网络服务器将呈现 PHP,因此没有人有机会查看该文件的源代码即可。所以有一些固有保护。但不用说,它可以被黑客攻击。
现在黑客当然希望破解网站。并且不对将要发布的数据有任何控制:这取决于浏览器。黑客有时会在发送请求之前修改内容,希望PHP脚本以某种方式失败并显示例如SQL查询等。首先,你最好做的是关闭错误报告强>:
error_reporting(0);
由于黑客可以找到一些警告/错误,最有助于找出基础算法并破坏它。通过在PHP文件中显式执行此操作,可以防止在修改服务器设置时再次出现错误。
您还可以更好地确保用户无论如何都无法直接访问敏感数据。这可以通过将敏感数据放入单独的文件(例如secure.php
)和include_once()
来实现,这样您就可以读取它的数据。
正如@Havenard和@AlexHowansky所说,您还可以将这些文件(secure.php
)更好地存储在公共可访问目录之外 。例如,public_html
以上。这并不总能完全解决问题,因为某些Web服务器对 URL-injection 敏感(通过指定http://www.domain.com/../securefolder/secure.php
,您有时可以访问公共目录上方的文件)。
正如@TomKriek所说,您还可以通过插入包含以下行的.htaccess
文件为“安全文件夹”提供附加保护:
<Files *.php>
Deny from All
</Files>
这意味着,如果配置正确,网络服务器将阻止用户访问目录中的所有.php
个文件。
最后,您最好提供文件适当的权限:如果PHP引擎作为与文件所有者相同的用户运行,则可以为其提供600
访问权限(chmod 600 secure.php
)或640
,以防PHP引擎在与文件所有者不同的用户上运行,但在同一用户组或最坏情况644
1}}以便黑客无法修改文件(或至少不应该)。您还可以通过运行www-data
将文件的所有者更改为chown www-data secure.php
,以便所有者是网络服务器,因此您可以更加严格地使用权限。经验法则始终是为其提供正确执行其工作的最低访问权限。
通过将文件权限设置为400
,440
或最差情况{{1},您也可以将文件设置为只读 }。在这种情况下,至少黑客不能作为付款的接收者进入他/她自己的银行账户;)。
总而言之,在设计/实现安全服务器时,最好使用分层方法,其中采取了多项措施,以便如果一项措施可能失败,其他人希望仍然会阻止黑客访问服务器/文件。