Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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 设置对象';直接而不是通过getter/setter设置属性_Php_Security_Oop - Fatal编程技术网

Php 设置对象';直接而不是通过getter/setter设置属性

Php 设置对象';直接而不是通过getter/setter设置属性,php,security,oop,Php,Security,Oop,我看到了谷歌网站管理员写的一篇文章,其中建议直接设置/获取对象参数以提高代码效率。但是,我认为按照建议(如下所示)操作而不是通过getter/setter方法访问对象的属性会使代码容易受到攻击 $rover = new dog(); $rover->name = 'rover'; echo $rover->name; 根本没有“安全”的含义。对于通过internet的攻击者来说,代码并不安全,因为它使用或不使用setter或getter。他们不“保护”任何安全方面的东西。gette

我看到了谷歌网站管理员写的一篇文章,其中建议直接设置/获取对象参数以提高代码效率。但是,我认为按照建议(如下所示)操作而不是通过getter/setter方法访问对象的属性会使代码容易受到攻击

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

根本没有“安全”的含义。对于通过internet的攻击者来说,代码并不安全,因为它使用或不使用setter或getter。他们不“保护”任何安全方面的东西。getter/setter形式的封装和访问控制所做的是保护您不被意外踩到自己的脚
$rover->name=..
允许您随时为属性分配任何内容
$rover->setName(..)
允许您在设置值时执行一些错误检查,您可以使用它来消除早期的bug。但它不能完全防止bug,也不能防止攻击者进行恶意操作。攻击者不会编写代码将某些内容分配给您的属性。攻击者利用代码或逻辑漏洞中的漏洞进行攻击;不是财产分配。

根本没有“安全”含义。对于通过internet的攻击者来说,代码并不安全,因为它使用或不使用setter或getter。他们不“保护”任何安全方面的东西。getter/setter形式的封装和访问控制所做的是保护您不被意外踩到自己的脚
$rover->name=..
允许您随时为属性分配任何内容
$rover->setName(..)
允许您在设置值时执行一些错误检查,您可以使用它来消除早期的bug。但它不能完全防止bug,也不能防止攻击者进行恶意操作。攻击者不会编写代码将某些内容分配给您的属性。攻击者利用代码或逻辑漏洞中的漏洞进行攻击;不是属性分配。

这意味着您失去了对类属性的控制,可以从外部添加新属性class@MarkBaker除非您在
\uu set
魔术方法中实现了一些东西,否则实际上没有任何方法可以阻止这种情况,不管您是否使用getter和setter。@KevinNagurski-true,这就是为什么使用存根魔术方法来防止此类事件是一个好主意,同时使用getter/setter来访问属性注意,这篇文章特别提到了天真的setter,它的作用与
->name=..
,,只需增加函数调用的额外开销。这意味着您失去了对类属性的控制,可以从外部添加新属性class@MarkBaker除非你在
\u set
魔术方法中实现了一些东西,否则真的没有办法阻止它,不管您是否使用getter和setter。@KevinNagurski-true,这就是为什么在getter/setter旁边使用存根魔术方法来防止此类事件是一个好主意,同时使用getter/setter来访问属性请注意,这篇文章特别提到了naive setter,它的作用与
->name=…
,,只需增加函数调用的额外开销。该死!我只是在写类似的东西。但是你说得更好,我的朋友:-)该死!我只是在写类似的东西。但你说得更好,我的朋友:-)