我想知道在较低级别代码中嵌入诸如散列和加密之类的东西的常见做法。似乎最好使用某种对象或宏约定,以便在发现漏洞并提高效率时可以轻松评估和更新安全功能。例如,我在处理身份验证的 PHP 代码中看到了以下约定(博客、代码峡谷、框架 wiki 等)……这是一个虚构的例子来说明这一点。
if ($myhash !== md5(shaX($this->key) . blah($this->salt) . blah($this->var))
而不是把它埋得很深,这不是更好吗?
if ($myhash != MY_HASH($key))
在配置文件或其他易于访问的对象中使用 MY_HASH,从而在可用时更容易更新/维护并具有更好的安全性?为什么不将任何加密或散列的金块放入仅包含转换函数的配置文件或特殊散列文件中?
另外 - 考虑数据库访问。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 逻辑,该逻辑在进行数据库访问的任何地方都重复出现?
IE
$mydata = $this->db_get_method($blah1, $blah2);
或者
$mydata = $DB_GET_METHOD($db_type, $blah1, $blah2);
当首选 if/else 歧视时,您似乎应该跳过抽象的东西,而只使用本机 API,使其更高效、更易于维护,因为本机 api 可能不会改变,并且抽象大多无效/voided 通过调用每个可能的数据库类型。或不?
My main experience is with real-time embedded C programming (a lot of PHP code looks like procedural C designed with global structs) so I'm wondering whether performance might be the definitive answer, i.e. it just runs faster this way? Do objects introduce too much latency/complexity?