2013-08-01 1 views
-1

PHP 응용 프로그램을 통해 파일 시스템 조작을 안전하게 수행하기위한 모범 사례, 모듈 등을 찾고 있습니다. CMS와 유사한 응용 프로그램은 데이터베이스를 사용하지 않지만 markdown 파일은 폴더에 저장되며 표시 시간에 처리됩니다. 따라서 파일 이동, 파일 이름 바꾸기, 파일 쓰기 등 많은 파일이있을 것입니다.PHP 파일 시스템 조작 보안 문제

이러한 작업을 관리하는 데 도움이되는 라이브러리 (예 : ORM과 동일)를 찾고자합니다. 입력 위생, 파일 이동. 처음부터 시작하기보다는 오히려 등. 이 같은 것이 없으면 모범 사례 등의 목록을 원합니다.

지금까지 단 guidance from PHP.net을 발견했습니다.

추가 정보 : 계획은 Stacey의 온타리오에 앉아 웹 기반 최종 사용자 인터페이스를 작성하는 것입니다. 최종 사용자 인터페이스가있는 테스트 환경을 가지며 변경이 준비되면 프로덕션 환경에 동기화됩니다. 이것은 비 DB 기반 시스템입니다. Stacey는 개발자 입장에서 관리하고 작업하는 것이 편리하지만 사용자는 markdown 및 파일 이동과 직접 작업하기를 원하지 않습니다.

기타 : PHP 문제에 대한 대답을 제한하십시오. chrooting 또는 서버 잠금과 같은 서버 작업은 사용자의 개별 환경과 필요에 따라 달라집니다. 개발 관점에서 볼 때 분산 코드 보안에 중점을두고 싶습니다.

답변

0

필자는이 작업을 수행하는 특정 라이브러리에 대해 잘 모릅니다. PHP의 파일 시스템 지원이 광범위하여 필요한 이유가 확실하지 않습니다. 기존 CMS로 시작하여 원하는 작업을 수행하는 것이 더 좋을 수도 있지만 가능하지 않을 수도 있습니다. 또한 데이터베이스를 사용해야하는 종류의 소리가 들리지만 이미 알고있는 것 같습니다.

정확하게 모범 사례를 알 수 없다고 주장 할 수 있습니다. 이는보다 일반적인 조언입니다.

먼저 웹 서버 및 PHP 스크립트가 특정 사용자로 실행됩니다. 이는 구성 및 특정 서버는 물론 기본 운영 체제에 따라 다릅니다. 이상적으로는이 사용자가 저장소로 사용하는 파일 시스템 영역에만 액세스 할 수 있도록하려는 것입니다. 실제로 필요한 곳 ​​(예 : 스크립트)에 대한 읽기 액세스와 저장 영역에 대한 읽기 - 쓰기를 제외하고 모든 곳의 모든 액세스를 거부하십시오. 이를 수행하는 정확한 방법은 시스템에 따라 다릅니다.

마지막 방어선입니다. 의존하지 말고, 안전망으로 있습니다.

정확히 무엇이 파일의 이름을 바꾸고, 이동하고, 변경 시킬지는 명확하지 않지만 사용자 입력에서 나온 것이 틀림 없습니다. 따라서 페이지 이름이 원하는 파일 이름이되면 일부 사용자가 을 페이지 이름으로 입력하고 기본 사이트를 누락시키지 못하도록하려는 경우 모든 사용자 입력을 삭제해야합니다.

항상 최악의 경우를 가정하십시오. 시스템의 내부를 철저히 알고 가장 많은 피해를 입는 사용자입니다. '무명의 안전'또는 '아무도 그렇게하지 않을 것'에 의존하지 마십시오.

내가 무엇을 할 것인지 (이전에했는지)는 두 가지입니다. 먼저 모든 파일 시스템 기능을 메소드와 동일한 기능을 제공하는 클래스로 랩핑하십시오. 이 클래스의 일은 일어나는 일이 허용되는지 확인하는 것입니다. 즉, 아마도 경로와 파일 이름을 읽고 변경 위치를 찾아야 할 것입니다.

둘째, 처음 도착했을 때 악의적 인 모든 사용자 입력을 삭제합니다.escapeshellarg 또는 URL 인코딩을 사용하거나 입력 내용에 따라 다른 방법을 사용하는 것이 좋습니다.

또한 파일이 런타임에 처리된다는 것을 언급합니다. 사용자가 스크립트 (또는 더 나쁜 PHP 실행 파일)를 쓸 수 있으면 문제가 더 많아지고 근본적인 문제가 발생할 수 있습니다. 그러나 그것은 당신의 질문에서 분명하지 않습니다.

희망이 있습니다.

+0

위의 업데이트를 참조하십시오. –