1

실행 중에 출력 파일을 삭제하는 것과 같이, sw의 두 인스턴스를 같은 입출력으로 보내는 등?사용자가 런타임에 파일을 썼을 때 데스크탑 응용 프로그램이 끔찍하게 파괴되는 것을 방지하려면 어떻게합니까?

+0

나는 그것을 얻지 않는다 지불 무엇을 얻을, 헤이 계획과 약간의 작업이 필요하지만? – Treb

+0

아, 이제 알겠습니다 : 출력 파일을 삭제하는 것은 모범 사례가 아닌 남용의 예가 될 것입니다 ... 좀 더 이해가됩니다 ;-) – Treb

+0

앱에 대해 더 자세히 설명해 주시면 도움이됩니다. - 데이터베이스와 대화합니까? 인터넷/웹 서비스에 연결 하시겠습니까? 창문이야? .그물? – Anthony

답변

7

사용자가 그렇게하지 못하게 할 수는 없지만 defensive programming을 적용하면됩니다.

두 가지 예제에서 리소스에 액세스 할 때마다 오류 조건을 감지하고 예외를 throw하고 해당 리소스에 대한 액세스없이 죽어 가거나 계속해서 반응해야합니다.

리소스 할당이 성공한다고 가정하지 마십시오. 사용자가 제어하지 않는 것을 항상 확인하십시오. 즉, 은 가능한 한 작게 가정하고 모든 내용을 확인합니다..

'이 파일에 액세스하려면이 파일에 액세스해야합니다. 이미 열려 있니? 권한이 있습니까? 예상 된 형식입니까? 디스크에 충분한 공간이 있습니까? 기타.'

더 많은 내용이 있습니다. 방어 프로그래밍을위한 Google 만 있으면 많은 정보를 얻을 수 있습니다.

1

아무 것도 가정하지 마십시오. 매번 IO를 사용하는 모든 작업을 확인하십시오. 빌드 인 검사를 통해 IO에 소프트웨어를 추가로 배치하십시오.

1

각 텍스트 상자에 최대 입력 길이를 넣거나 UI의 컨트롤을 편집하십시오. 유효하지 않은 데이터 (예 : 숫자가 예상되는 곳의 편집 텍스트)를 입력하고 그런 종류의 입력을 확인/처리하는 일반적인 방법을 테스트합니다.

검색어를 통한 SQL 주입 공격에 대해서도 생각해보십시오. 예 : 성이 ___ 인 사용자를 찾고 사용자가 "* smith"라고 입력하십시오. select * from users * "데이터베이스 계층은 무엇을 할 것입니까?

사용자가 입력 한 데이터가 다시 표시되거나 (악화되면 다른 사용자에게) 마크 업이나 컨트롤을 포함 할 수 있는지 확인하십시오 시퀀스가 표시 될 때 UI를 남용 할 수 있습니다.

대상이되는 OS와 언어는 밝히지 않지만 실행에 필요한 최소한의 권한을 응용 프로그램에 제공하십시오. 예를 들어 .Net, 선언적 보안 속성을 살펴보십시오. 즉, 공격자가 앱을 제어 할 수 있다면 피해가 적습니다.

의도적으로 잘못된 입력을 사용하여 단위 테스트를 생성합니다. 응용 프로그램이 그것을 처리 할 수 ​​있는지 확인하십시오.

0

사람들이 한 가지 들어 본 것은 VirtualPC 아래의 신뢰할 수없는 물건을 실행하여 기본 시스템이 무엇이든 손상되지 않도록합니다.

1

여기에 몇 가지 좋은 답변이 있습니다. 그러나 당신이 방어해야 할 대상을 고려해야한다고 생각합니다.

프로그램을 사용하려는 사람들이 프로그램을 사용하려고합니까? 그렇다면, 당신은 사보타지보다는 어리 석음 (실용 범위까지)을 방어해야합니다. 모든 입력을 계속 확인하고 싶지만 사용자가 어리석은 짓을하는 경우 최적의 결과를 얻지 않는 것이 합리적입니다. 사용자가 시스템에 액세스 할 수있는 경우 출력 파일을 삭제하는 등의 작업을 방지 할 수 없으므로 코드를 작성할 수 없습니다. 교육 문제 일뿐입니다.

사람이 펀치 인/아웃 할 때를 기록하는 시간 기록 응용 프로그램과 같이 프로그램을 사용하지 않으려는 사람들이 프로그램을 사용하게됩니까? 누군가는 물리적 보안 (상업용 버전은 악용을 많이 감수하도록 설계됨)과 소프트웨어 보안 (아무도 시간을 변경할 수 없음)을 고려해야합니다. 매우 간단한 인터페이스를 제공하고 입력을 자세히 확인해야합니다.

+0

"사용자가 시스템에 액세스 할 수있는 경우 출력 파일을 삭제하는 등의 작업을 할 수 없으므로 코드를 작성할 수 없습니다." <--- 예를 들어 프로그램을 정상적으로 종료하지 않고 프로그램을 정상적으로 종료 할 수 있는지 확인해야합니다. –

0

사용자 테스팅을 시뮬레이트하는 데 유용한 테스터가 있다면 어떨까요?

0

이것은 까다로운 질문입니다. 사용자 (심지어 멍청한 사람)는 결코 고려하지 않은 방식으로 응용 프로그램을 사용하는 것에 대해 영리합니다.

나는 (Vinko가 위에서 언급 한) 방어 프로그래밍의 큰 팬이다. 위험 분석의 관점에서 접근 할 수 있습니다. 응용 프로그램에서 사용하는 리소스를보고 파일, 장치, 데이터 등을 수정하고 해당 리소스에 잘못 될 수있는 내용을 브레인 잡고 주위를 계획하십시오.

예를 들어 전용 하드웨어 리소스가 있고 응용 프로그램의 여러 인스턴스가 각각 해당 리소스에 대해 경합하는 경우 사용자가 둘 이상의 인스턴스를 실행할 수 없도록 응용 프로그램에 대한 단일 패턴을 적용 할 수 있습니다. 불량의 종류를 뜻 :이 모든

은 우리가 :)

관련 문제