在作为 GLOBALS 的函数中使用 Mysqli_connect 链接是不是安全?

Posted

技术标签:

【中文标题】在作为 GLOBALS 的函数中使用 Mysqli_connect 链接是不是安全?【英文标题】:is it safely to use Mysqli_connect link in a function as GLOBALS?在作为 GLOBALS 的函数中使用 Mysqli_connect 链接是否安全? 【发布时间】:2015-06-17 09:02:46 【问题描述】:

在函数中使用 mysqli_connect 链接作为 GLOBALS 是否安全,如下例所示?这种方式我可能会遇到什么问题?

function dbconnect()

$link = mysqli_connect($db['host'], $db['user'], $db['pass']);
mysqli_select_db($link, $db['db']);
return $link;



function something_query($sql)

return mysqli_query($GLOBALS['conn'], $sql);



$conn = dbconnect();    

$newsql = 'select * from table where 1';
something_query($newsql); 

edit 1 : $conn 是整个代码的唯一字符串,它不用作查询中的参数

【问题讨论】:

是的,如果您遵守“注射安全规则”,它是安全的。一些相关的帖子可以找到***.com/questions/5840230/…和***.com/questions/2688/…。 能否解释的更清楚些,我在“mysqli_query”中不使用$conn,这里怎么会发生注入? 【参考方案1】:

是的,它可以保存(例如,它没有安全风险)。

虽然它不是最好的设计。依赖注入通常比全局变量更受欢迎,因为它使您有机会仅测试一小部分代码,并模拟该测试不需要的其余部分,并且它增加了代码的可重用性(您可以采取一个类/函数并在不同的项目中使用它,而无需阅读所有代码并检查全局中需要存在哪些值)。

【讨论】:

您有什么建议可以提高这个结构的安全性或可重用性吗? 安全方面没什么好说的(一般不建议将凭据存储在web根目录内的php文件中,但不清楚你的脚本在哪里,所以我没有评论它在我的回答中)。将连接存储在GLOBALS 中很好,我假设您使用准备好的语句进行查询。为了可重用性,只需将连接传递给函数:something_query($connection, $sql) 谢谢你,这非常有用,但是something_query($connection, $sql) 在我的情况下并不是最好的解决方案,如果我遵循这个,我必须更改使用这个和类似功能的其余部分

以上是关于在作为 GLOBALS 的函数中使用 Mysqli_connect 链接是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

在 Matlab 中使用 Globals 而不是传递大型数组

php mysql/mysqli sql插入id

Angular Unit Test:如果构造函数将 Globals.ts 文件作为参数,如何创建组件实例

PHP中的Mysqli资源作为参数或全局

php mysql/mysqli受影响的行

php mysql/mysqli结果