2012-01-04 1 views
4

나는 프로그래밍을 해오 고 있으며 공공, 민간 및 보호의 차이점을 대부분 이해한다고 생각하지만 이러한 이름은 오도 된 것입니까? 이 수준의 가시성은 우리 자신의 발가락을 여행하지 못하게하는 데 도움이됩니까? 내가 프로그래밍 한 많은 언어가 이러한 규칙의 대부분을 시행하지 않는 것으로 보이며 변수 중 하나가 비공개로 표시되어 해커가 시스템에 침입하는 것을 들어 본 적이 없습니다.변수 프라이버시는 실제로 보안과 관련이 없습니까? 아니면 프로그래밍 편의를위한 것입니까?

는 나는 몇 년 동안 날 귀찮게되었습니다이 알고 싶어요.

답변

6

해커가 메모리 오프셋을 올바르게 계산할 수있는 경우 해커가 개인 변수에 액세스 할 수 있습니다. 그리 어렵지 않습니다.

이러한 액세스 제어는 더 광범위하고 일반적으로 다른 오류 클래스를 포함합니다. 캡슐화가 잘되면 코드가 단순 해지고 추론하기가 더 쉬워 지므로 보안 문제 인 다른 실수를 발견 할 수있는 경로가 없어집니다. (즉, 간접적 보안을하는 데 도움이 입니다.)

가 목적에 침입 어렵

코드

+0

그래서 나는 물건을 일정하고 보호 받고 개인적으로 선언 할 때 실수를 더 쉽게 나타낼 수있게 만들었을뿐입니다. 내가 여분의 일을하고 그 변수로 옵션을 줄이는 것 같아. 나는 보통 한 번에 하나의 오류만큼 빨리 디버깅 할 수 있으면 그 물건을 남겨 둡니다. 나는이 말들이 나를 어떻게 도울 지 모른다. 진지하게 나는 이것에 대해 생각해 보면서 사람들에게 묻고 마침내 여기서 묻는다. 나는 그것을 이해할 수 없다. – NickJ

+1

예 const/private 옵션이 적습니다. 그건 좋은거야. 잘못 될 일이 적고 디버깅 할 때 고려해야 할 사항이 적습니다. 버그를 개인 상태의 돌연변이로 간주 할 수 있다면 *** 큰 검색 공간을 줄일 수 있습니다. 필요한 경우가 아니면 private/const로 만듭니다. – spraff

+0

아마 선언적/기능적 언어로 시간을 투자해야 할 것입니다. 같은 태도 나 스타일로 C++로 돌아 가지 않을 것입니다. – spraff

2

액세스 지정자 소스 코드를 주문하는 수단입니다 너무 :-), 사고로 깰 아마 더 열심히하고 보안 기능이 아닙니다. 클래스의 멤버 변수는 자신의 코드에 정의되어 있기 때문에

, 그들은 상관없이 액세스 지정자의 방법으로 (포인터, 매크로)를 액세스 할 수 있습니다. 당신은 다른 사람이 사용할 수 있도록하기위한 라이브러리를 작성하는 경우

+0

그래, 이건 항상 나를 혼란스럽게 만드는 다른 것들 중 하나였다. 내가이 모든 코드를 직접 작성한다면 왜 나 자신으로부터 물건을 확보해야 할까? 항상 변수를 유지하기 위해 범위를 사용했습니다. – NickJ

+0

"나 자신에게 물건을 확보하는 이유는 무엇입니까?" [전문가들은 자신을 신뢰하지 않습니다.] (http://altdevblogaday.com/2011/12/24/static-code-analysis/) – spraff

1

, 당신은 API를 노출하고 다른 모든 것을 숨기려. 당신은 문서화되지 않은 "기능"을 그 곳곳에 뿌리 내리고 싶지 않습니다. 이것들은 모든 종류의 버그로 이어질 수 있고, 차례로 보안 허점을 만들 수 있습니다.

코드가 다른 사람이 아니더라도 의도 한 순서대로 무언가를 할당하거나 변수가 다른 것을 의미 할 때 변수라는 것을 생각하면 잊어 버리고 쉽게 넘어갈 수 있습니다.

그래서 짧은 대답은 그냥 프로그래밍 편리하지만 이러한 프로그래밍 편의 시설이 좀 더 강력하고 더 안전한 코드를 만들 수 있도록 할 수 있다는 것입니다.

+0

내가 어디로 가는지 볼 수는 있지만 컴파일 된 것이거나 호스트 된 것이면 API 및 코드 라이브러리가 아닌 경우 임의의 코드가 올바르게 실행되지 않도록 모든 데이터를 스크럽 할 수 있어야합니다. 라이브러리라면 아무튼 어쨌든 수정할 수 있기 때문에 많은 보안이 필요하지 않습니다. – NickJ

+0

여기에 두 가지 유형의 "보안"이 있습니다. 컴파일 된 또는 호스트 된 API (비공개 소스) 인 경우 코드 자체를 안전하게 유지하고자합니다. 그런 다음 모든 레벨에서 모든 응용 프로그램 사용자에게 보안이 적용됩니다. 이는 모든 라이브러리/API/호스트 코드/기타에 영향을줍니다. 이 경우 누군가가 라이브러리를 사용하여 보안 상 손해를 면밀히 수정하면 해당 라이브러리가 잘못되었습니다. 개발자가 원래의 라이브러리 (컴파일 된 또는 다른 방법으로) 개발자로서 가능한 한 많은 우수 사례를 따르는 지 확인합니다. –