Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在github上公开后端是一种不好的做法吗?_Php_Github_Backend - Fatal编程技术网

Php 在github上公开后端是一种不好的做法吗?

Php 在github上公开后端是一种不好的做法吗?,php,github,backend,Php,Github,Backend,这可能是一个愚蠢的问题,但我是后端代码的绝对初学者,我正在尝试专业地实践构建应用程序。将我的应用程序的整个代码库(不包括数据库密码、api密钥和其他敏感数据位)推送到公共github repo会被认为是错误的做法吗?这是否将我的应用程序(一旦托管)设置为易受攻击的位置?如果github repo设置为private,安全吗?在github上处理前端和后端的专业方式是什么?我已经搜索过网络了,但是“后端”和“github”只是显示了“github页面不支持服务器端代码”的结果。这很有趣,但完全是另

这可能是一个愚蠢的问题,但我是后端代码的绝对初学者,我正在尝试专业地实践构建应用程序。将我的应用程序的整个代码库(不包括数据库密码、api密钥和其他敏感数据位)推送到公共github repo会被认为是错误的做法吗?这是否将我的应用程序(一旦托管)设置为易受攻击的位置?如果github repo设置为private,安全吗?在github上处理前端和后端的专业方式是什么?我已经搜索过网络了,但是“后端”和“github”只是显示了“github页面不支持服务器端代码”的结果。这很有趣,但完全是另外一回事。

假设您使用的是php,但这在其他语言中也适用

在构建时,我将所有db/connect凭据都放在一个文件中,并将每个凭据设置为一个变量,例如$username、$password等。然后使用include语句将这些变量引入connect文件。然后,如果您担心其他人看到该凭证文件,请将该凭证文件放入.gitignore

但请确保include语句位于connection语句之前

比如说

//credential.php
$username = 'usernameExample'
$password = 'passwordExample'

//then in your connect file

//connect.php
include 'credential.php'

//put a try block here
   $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
 /put a catch block here

对于gitignore,只需将make a file命名为.gitignore并将credential.php放入

假设您的应用程序遵循最佳实践且没有漏洞,这是绝对安全的,只要您没有(意外地)包含您提到的任何凭据或机密

如果您的应用程序确实存在漏洞,那么将其放在GitHub上实际上可能会降低危险。如果该漏洞位于您正在使用的依赖项中,请将其添加到该漏洞中,使您意识到它并允许您修复它。此外,其他用户可能会发现缺陷,报告问题或PR并帮助您修复。另一个额外的好处是,如果您自己的计算机遭到破坏,您的代码可以安全地存储在异地

另一方面,有动机的攻击者可能希望利用该漏洞进行攻击。为了做到这一点,他们仍然需要筛选您的代码以找到它,然后攻击您是否有人在使用您的软件。除非您的软件被高价值目标或大量目标使用,否则这对攻击者来说是不经济的

如果github repo设置为private,安全吗

差不多是这样。私人回购的内容受以下规定的约束:

简短版本:您可以访问私有存储库。我们将私有存储库的内容视为机密,我们仅在获得支持、您同意或出于安全原因需要时访问它

我鼓励您阅读ToS的整个章节,如果您对私人回购协议的保密性有顾虑,这本书不太长,但值得一读

请注意,现在微软自己在GitHub上以私有repo的形式托管Windows源代码。许多其他公司也这样做。GitHub在这方面赢得了值得信赖的声誉


恕我直言,我会毫不犹豫地在GitHub上公开发布开源项目。但是,如果项目是一个封闭源代码的营利性应用程序,那么问题就出现了,为什么首先要提供源代码。私人回购更适合这样做。

我认为没有一个简短的答案

很大程度上取决于代码本身的质量。如果您不使用预先准备好的语句访问数据库,那么可能有人想要攻击您的后端站点,他们可能会找到一种简单的方法。如果您正确使用准备好的语句,它们甚至可能不会受到sql注入攻击的影响

但企业将代码保密的主要原因是它被视为敏感数据,就像密码和api密钥一样。如果您的代码在公共存储库中,竞争对手可以简单地复制它,然后可能会稍微修改一下布局,并在一周内使用您花了一年时间构建、改进和扩展的内容

尽管如此,即使代码是私有的,也应该将其视为公共的。这意味着您需要确保密码和api密钥等内容不会最终出现在存储库中


还要记住,在提交文件之后,很难从git存储库中删除这些文件。如果文件在commit 123456中提交,然后在commit abcdef中删除,则它仍然存在于提交历史记录中。

“在github上处理前端和后端的专业方式是什么”-该术语称为“秘密管理”。请参见:您应该尝试以安全的方式构建应用程序,即使攻击者可以访问完整的源代码。否则,您将通过模糊性依赖安全性。@Dai OP明确地写道“排除数据库密码[…]”。你的引文在很大程度上歪曲了文章的内容。@Polygenme哦,哇,我很适合快速阅读。我已经删除了我最初的评论回复。这就是我所做的。在我的目录根目录中有一个名为config.php的文件,它以数组的形式返回敏感凭据。然后我使用.gitignore来避免跟踪文件。不过,代码的其他部分是否对公众安全?“安全”是一个加载的术语。我会保密你的回购协议,除非你有理由不这么做。其他人指出了攻击者如何评估您的代码以发现漏洞(然后可能对其进行攻击)。或者想象一下,一个竞争对手克隆了你的回购协议,省去了自己编写应用程序的痛苦:这可能是个问题,也可能不是,这取决于你的商业模式。“微软……GitHub上的Windows源代码,在私人回购协议中。”微软是否公开谈论过这一点?这句话有参考文献吗?(这并不是要剥夺GitHub作为平台的可信度。)@Brad Yes,他们在GitHub被微软收购时谈论过这件事(我认为想把他们自己的代码放在那里也是一个原因)