Php 设置对象';直接而不是通过getter/setter设置属性
我看到了谷歌网站管理员写的一篇文章,其中建议直接设置/获取对象参数以提高代码效率。但是,我认为按照建议(如下所示)操作而不是通过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
$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=…
,,只需增加函数调用的额外开销。该死!我只是在写类似的东西。但是你说得更好,我的朋友:-)该死!我只是在写类似的东西。但你说得更好,我的朋友:-)