2010-04-15 3 views
5

저는 현재 PHP를 사용하여 순수하게 교육의 목적으로 CMS를 만들려고합니다. 관리자가 컨텐트를 만들 수 있기를 원합니다.이 컨텐트는 순수한 HTML 형식으로 서버 저장소에 저장되어 구문 분석되어 PHP 스크립트를 실행하는 오버 헤드를 피할 수 있기를 바랍니다. 안타깝게도 다음과 같은 몇 가지 방법 만 생각할 수 있습니다.PHP를 사용하여 파일을 작성하는 보안상의 영향

  • CMS에서 파일을 쓰려는 모든 디렉토리에 대한 쓰기 권한을 설정합니다. 이것은 꽤 나쁜 생각처럼 들립니다.
  • cached 디렉터리에 쓰기 권한을 설정합니다. PHP 스크립트는 요청 시간에 cached 디렉토리에있는 파일의 내용 인 include 또는 fopen/fread/echo 일 수 있습니다. 이것은 아마도 index.php?page=xyz과 같은 것이 런타임에 cached/xyz.html에서 내용을 읽고 에코 할 수있는 Mediawiki-esque 방식으로 수행 될 수 있습니다. 그러나 index.php?page=http://www.bad-site.org/malicious-script.js과 같은 불쾌감을 피하기 위해 $_GET['page']의 성실성을 확인해야합니다.

나는 개인적으로 두 번째 아이디어에 너무 흥분하지 않지만 첫 번째 아이디어는 매우 불안정합니다. 누군가가이 일을 처리 할 수있는 좋은 방법을 제안 해 주시겠습니까?

편집 : 데이터베이스에서 데이터를 가져 오는 것이 좋습니다. 데이터베이스에서 데이터를 가져오고 싶은 유일한 시간은 내용이 캐시 될 때입니다. 둘째, memcached 또는 PHP 가속기에 액세스 할 수 없습니다.

답변

2

CMS를 제작 중이므로 사용자가 방문자에게 악의적 인 일을하고 싶다면 매우 그렇다고 생각할 수 있습니다. 콘텐츠를 저장하는 위치와 상관없이 사실입니다.

공개 사이트가 모두 정적 콘텐츠 인 경우 CMS에서 직접 파일을 기록하도록하는 데는 아무런 문제가 없습니다. 그러나 CMS에서 쓸 수있는 모든 디렉토리에서 아무것도 실행하지 않도록 웹 서버를 구성해야합니다.

매번 데이터베이스에 도달하지 않으려는 경우에도 데이터베이스 읽기를 최소화하기 위해 캐시를 설정할 수 있습니다. Zend_Cache은 매우 잘 작동하며 독립 실행 형 구성 요소로 매우 효과적으로 사용할 수 있습니다.

+0

+1은 실행 권한을 언급합니다. 그러나, 나는 당신의 첫 번째 점에 동의하지 않는다 - 당신은 편집자의 기능을 원하는만큼 축소시킬 수있다 (예를 들어 자바 스크립트를 벗겨 낸다). 또한 방문자가 보호해야 할 것이 아니라 서버의 무결성을 보호하십시오. – CurtainDog

+0

물론입니다! 이해할 수있는 일을 제한하지만, 하루가 끝날 때까지 사용자는 "최근에 폐위 된 나이지리아 왕의 형제 존 푸 (Jon Foo)"라는 웹 페이지를 만들 수 있으며, 4200 만 달러를 USA ... "서버를 보호하는 한, 파일을 쓸 수있는 곳에서만 파일을 쓰고 웹 서버는 그곳에서 스크립트로 취급하지 않도록하십시오. 나는이 소리를 사소한 것으로 만드는 것을 의미하지는 않습니다. 많은주의 깊은 작업이 요구됩니다. 그러나 본질적으로 불안정하지는 않습니다. – timdev

+0

방문자에게 악의적 인 일을하는 사용자는 문제가되지 않아야합니다. 콘텐츠는 신뢰할 수있는 사용자 그룹에 의해 추가되고 캐시되므로 문제가되지는 않습니다. 공개 디렉토리에 대한 쓰기 권한이 잠재적 인 취약성으로 악의적 인 방문자에 의해 사용될 수 있는지 궁금했습니다. 실행 부분을 가리켜 주셔서 감사합니다! 예산이 매우 중요한 문제이기 때문에 현재 캐시를 설정할 수 없습니다. 우리는 합리적인 대역폭과 거의 다른 PHP/MySQL을 제공하는 호스팅 계획을 진행할 가능성이 큽니다. – susmits

1

페이지를 데이터베이스에 저장하고 매개 변수가있는 SQL 쿼리를 사용하여 검색해야합니다.

+0

위에서 언급했듯이 스크립트의 실행 시간을 줄이려고합니다. 나는 데이터베이스와 뒤로 여행이 다소 비쌀 것이라고 확신한다! PHP 가속기 나 memcached에 액세스 할 수 없습니다. 나는 그것을 질문으로 편집 할 것입니다! – susmits

0

두 번째 옵션을 사용하지만 사용자 정의 PHP 함수가 아닌 mod_rewrite를 사용하여 파일을 검색하도록 수정했습니다.

관련 문제