2016-11-25 3 views
2

나는 한때 교사가 사생활 보호 또는 항상 보호 된 것으로서의 속성 가시성을 설정하는 데 왜 선생님에게 질문을했습니다. 그녀는 이것이 대중에게 공개하는 것보다 더 안전하다고 나에게 대답했다. 그러나 나는이 답변에 자신이 없다. 따라서, 최종 사용자가 수업을 조작 할 수있는 방법이 없을지라도 공개 속성은 속성에 비해 안전성이 떨어지는 지 알고 싶습니다. 왜 ?PHP - 공용 가시성이 덜 안전합니까?

+1

에 의해 대체 될 수 있습니다 실수로 public으로 선언 된 경우

, 그것은 더 이상 또는 덜 안전한 것은 아니지만 클래스에서 기능 사용을 제한 할 수있는 방법의 더. – Rasclatt

답변

2

공공 속성을 스스로 더 안전하거나 불안하지 않습니다를 참조하십시오. 그러나 많은 공공 재산을 소유하면 간접적으로 덜 안전한 응용 프로그램이 될 수 있습니다. 예를 들면 다음과 같습니다.

많은 공개 속성이있는 클래스는 자신의 메서드 대신 코드의 다른 부분에서 조작 할 수 있기 때문에 추론하기가 더 어렵습니다. 이렇게하면 응용 프로그램 전체의 보안을 관리하기가 어려워 질 수 있습니다.

즉, 공개 속성은 더 큰 attack surface으로 이어질 수 있습니다.

7

아니요, 절대적인 쓰레기입니다. 그것은 더 이상 안전하지 않습니다. 사용자가 원한다면

, 그들은 개체에 대한 보호/전용 속성에 액세스 할 수 있습니다

class Car { 
    protected $engine = 'V8'; 
} 

$reflector = new ReflectionClass('Car'); 
$engineProperty = $reflector->getProperty('engine'); 
$engineProperty->setAccessible(true); 

$maserati = new Car; 
echo $engineProperty->getValue($maserati); // echoes "V8" 
$engineProperty->setValue($maserati, 'I4'); 
echo $engineProperty->getValue($maserati); // echoes "I4" 

그래서, 명백히, 어떤 보안 혜택이 없습니다.

이점은 클래스가 상호 작용할 수있는 기능과 속성을 표시하여 최종 사용자에게 도움이된다는 것입니다. 개발자는 원하는 경우 클래스의 내부를 완전히 변경할 수 있지만 호출하는 코드는 변경하지 않아도됩니다. 만약 그들이 이 정말로이 되길 원한다면, 클래스의 사용자는 그것에 대해 걱정할 수 있습니다. 그러나 문제가 해결되지 않으면 문제가됩니다!

+0

나는 이것을 생각하고 있었지만 확실하지는 않았다. 선생님은 저에게 부동산을 비공개/보호해야하며 외부 범위와 상호 작용하기를 원했을 때 게터와 세터 만 사용하고 공개 여부는 사용하지 않아야한다고 말했습니다. 올바른 값이 설정되었는지 확인합니다). –

+0

@ BrunoCorrêaZimmermann 나는 공공의 제한에 대한 전체 개념에 동의하지 않을 것이다. 당신이이 사람/회사에서 일하면서 사내 표준이었던 경우, 당신이 그것에 충실해야한다고 말했을 것이지만, 일반적으로이 방법을 제한하는 것은 실질적인 이익을 위해 제한하고 있습니다. "보안"관점에서가 아니라 – Rasclatt

+0

감사합니다. 내 의심을 해결했습니다. –

2

이것은 보안과 관련이 없습니다. 캡슐화은 선생님이 찾고있는 단어 일 수 있습니다.

다른 답변을 지적 What is encapsulation? How does it actually hide data?

+0

. 하지만 getter/setter 캡슐화는 공용 속성보다 안전합니까? 올바른 값만 설정되도록하더라도? –

+0

아니요. 그러나 좋은 소프트웨어 클래스/패키지는 다른 코드 모듈에서 실제로 액세스해야하는 기능만을 노출합니다. – einherjer

+0

내가 링크 된 질문의 대답을 읽었습니다. 여기에 전체 내용을 복사하여 붙여 넣지는 않겠습니다. 제대로 캡슐화 된 코드를 작성하는 주된 장점을 설명합니다. * Security *는 이에 대한 올바른 용어가 아닙니다. – ShiraNai7

0

상속은 캡슐화의 영향을받는 또 다른 영역입니다.

새 기능은 종종 하위 클래스가있는 기본 클래스를 확장하여 응용 프로그램에 추가됩니다. 소프트웨어 프로젝트에서 일하기 위해 고용 된 새로운 개발자는 일반적으로 다른 개발자가 만든 클래스의 공용 메서드를 사용합니다. 방법은 다음 향후 개발자 내 지식