大佬教程收集整理的这篇文章主要介绍了php-未定义索引-安全风险vs性能vs代码膨胀,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在一个项目中进行开发,该项目的REST API基本上在开发模式下中断,因为它具有更多的包含错误报告策略.这是该项目中的典型行:
public function someAction() {
// Returns a map of params => values sent with HTTP req
$params = $this->getParams();
// This key may not exist --+
// |
// v
$someField = $params['someField'] ?: 'default value';
$someField = $this->sanitizeInput($someField);
// ...
}
结果,开发人员模式下的JSON响应通常会被PHP乱抛垃圾:注意:未定义的索引警告,这会破坏JSON输出字符串.
我的问题
>假设变量已初始化(尤其是从$_GET或$_POST中提取变量时),安全风险到底是什么(如果有)?
>使用isset()或array_key_exists()遍历对假定的数组键的所有访问是否值得麻烦?
>我在单个键周围添加了isset(),这些键在整个应用程序中的某些操作下会引发未定义索引警告,但是代码现在看起来super肿了…
解决方法:
忽略这样的错误的问题正是您所发现的-调试变得非常痛苦,潜在的实际错误被视为“正常行为”而被忽略.
但是,与编程中的其他时间一样,如果您发现自己一遍又一遍地编写相同的代码,则可能需要编写抽象.
在您的情况下,您可以向该类添加一个附加方法,以及getParams(大概只是返回$_REQUEST的内容),添加一个get@R_800_1403@方法:
function getParam($key, $default=null)
{
return isset($_REQUEST[$key])? $_REQUEST[$key] : $default;
}
$someField = $this->getParam('someField', 'default value');
function getParam($key, $default=null)
{
return isset($_REQUEST[$key])? $this->sanitizeInput($_REQUEST[$key]) : $default;
}
进一步减少您的呼叫代码.现在,您不仅拥有适当的无错误代码,而且从三行减少了调用代码:
$params = $this->getParams();
// This key may not exist --+
// |
// v
$someField = $params['someField'] ?: 'default value';
$someField = $this->sanitizeInput($someField);
到一个:
$someField = $this->getParam('someField', 'default value');
以上是大佬教程为你收集整理的php-未定义索引-安全风险vs性能vs代码膨胀全部内容,希望文章能够帮你解决php-未定义索引-安全风险vs性能vs代码膨胀所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。