저는 현재 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 가속기에 액세스 할 수 없습니다.
+1은 실행 권한을 언급합니다. 그러나, 나는 당신의 첫 번째 점에 동의하지 않는다 - 당신은 편집자의 기능을 원하는만큼 축소시킬 수있다 (예를 들어 자바 스크립트를 벗겨 낸다). 또한 방문자가 보호해야 할 것이 아니라 서버의 무결성을 보호하십시오. – CurtainDog
물론입니다! 이해할 수있는 일을 제한하지만, 하루가 끝날 때까지 사용자는 "최근에 폐위 된 나이지리아 왕의 형제 존 푸 (Jon Foo)"라는 웹 페이지를 만들 수 있으며, 4200 만 달러를 USA ... "서버를 보호하는 한, 파일을 쓸 수있는 곳에서만 파일을 쓰고 웹 서버는 그곳에서 스크립트로 취급하지 않도록하십시오. 나는이 소리를 사소한 것으로 만드는 것을 의미하지는 않습니다. 많은주의 깊은 작업이 요구됩니다. 그러나 본질적으로 불안정하지는 않습니다. – timdev
방문자에게 악의적 인 일을하는 사용자는 문제가되지 않아야합니다. 콘텐츠는 신뢰할 수있는 사용자 그룹에 의해 추가되고 캐시되므로 문제가되지는 않습니다. 공개 디렉토리에 대한 쓰기 권한이 잠재적 인 취약성으로 악의적 인 방문자에 의해 사용될 수 있는지 궁금했습니다. 실행 부분을 가리켜 주셔서 감사합니다! 예산이 매우 중요한 문제이기 때문에 현재 캐시를 설정할 수 없습니다. 우리는 합리적인 대역폭과 거의 다른 PHP/MySQL을 제공하는 호스팅 계획을 진행할 가능성이 큽니다. – susmits