gpt4 book ai didi

php认证/数据库代码风格

转载 作者:可可西里 更新时间:2023-11-01 09:56:00 25 4
gpt4 key购买 nike

我想知道将散列和加密之类的东西深入到较低级别代码中的常见做法。似乎最好使用某种对象或宏约定,以便在发现漏洞和提高效率时轻松评估和更新安全功能。例如,我在处理身份验证的 PHP 代码中看到以下约定(博客、代码峡谷、框架 wiki 等)……这里是一个虚构的示例来说明这一点。

if ($myhash !== md5(shaX($this->key) . blah($this->salt) . blah($this->var))

与其把它埋得很深,这样不是更好吗

if ($myhash != MY_HASH($key))

在配置文件或其他易于访问的对象中使用 MY_HASH,从而在它可用时更容易更新/维护并具有更好的安全性?为什么不将任何加密或散列的 block 放入配置文件或仅包含转换函数的特殊散列文件中?

另外 - 考虑数据库访问。 PHP 有很多抽象,但我看到应用程序这样做:

// grab some data from the database
if ($this->mongo_flag)
{
$this->mongo_abstraction
->where($blah1, $x)
->update($blah2);
}
elseif ($this->mysql_flag)
{
$this->mysql_abstraction
->where($blah1, $y)
->update($blah2);
}
elseif ($this->couch_flag)
{
$this->couch_abstraction
->where($blah1, $z)
->update($blah2);
}

也许只有 x,y,z 不同。

不能预先实例化一个具有正确 db 方法的对象,从而消除 if/else 逻辑,该逻辑在进行数据库访问的任何地方都重复吗?

$mydata = $this->db_get_method($blah1, $blah2);

$mydata = $DB_GET_METHOD($db_type, $blah1, $blah2);

当首选 if/else 歧视时,您似乎应该跳过抽象的东西,只使用 native API 使其更高效、更易于维护,因为 native api 可能不会改变和抽象通过调出每种可能的数据库类型,大部分被取消/作废。还是不行?

我的主要经验是实时嵌入式 C 编程(很多 PHP 代码看起来像用全局结构设计的过程 C)所以我想知道性能是否可能是决定性的答案,即它以这种方式运行得更快吗?对象是否引入了过多的延迟/复杂性?

最佳答案

我喜欢你的建议。特别是对于散列,我认为将其包装到一个易于访问的位置是明智的。我也喜欢你关于调用数据库方法的建议。但是,使用 PHP 执行您建议的操作需要反射,并且存在性能问题,请查看这篇文章 PHP 5 Reflection API performance .性能受到的打击似乎并不太严重,但性能仍然有所下降。我认为实现 db 方法调用的更好方法是使用 OOP 继承而不是传递动态方法。每个数据库应该有一个不同的对象。

关于php认证/数据库代码风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com