사용자 제출 데이터

많은 PHP 프로그램의 가장 큰 약점은 언어 자체에 내재된 것이 아니라 보안을 염두에 두고 작성되지 않은 코드의 문제일 뿐입니다. 이러한 이유로, 예상치 못한 변수가 코드에 제출될 경우 가능한 손상을 확인하기 위해 항상 주어진 코드 조각의 의미를 고려하는 시간을 가져야 합니다.

예제 #1 위험한 변수 사용

                  
<?php
// remove a file from the user's home directory... or maybe
// somebody else's?
unlink ($evil_var);

// Write logging of their access... or maybe an /etc/passwd entry?
fwrite ($fp, $evil_var);

// Execute something trivial.. or rm -rf *?
system ($evil_var);
exec ($evil_var);

?>
                  
                

웹 브라우저에서 제출되는 모든 변수가 제대로 확인되고 있는지 확인하기 위해 항상 코드를 주의 깊게 검토하고 다음 질문을 해야 합니다.

  • 이 스크립트는 의도한 파일에만 영향을 줍니까?
  • 비정상적이거나 바람직하지 않은 데이터에 대해 조치를 취할 수 있습니까?
  • 이 스크립트를 의도하지 않은 방식으로 사용할 수 있습니까?
  • 이것은 부정적인 방식으로 다른 스크립트와 함께 사용할 수 있습니까?
  • 모든 트랜잭션이 적절하게 기록됩니까?

나중에가 아니라 스크립트를 작성하는 동안 이러한 질문을 적절히 함으로써 보안을 강화해야 할 때 불행하게 다시 작성하는 것을 방지할 수 있습니다. 이러한 마음가짐으로 시작하면 시스템의 보안을 보장할 수 없지만 개선하는 데 도움이 될 수 있습니다.

또한 주어진 변수의 유효성, 소스 또는 값에 대해 혼동을 줄 수 있는 register_globals, magic_quotes 또는 기타 편의 설정을 끄는 것을 고려할 수도 있습니다. error_reporting(E_ALL) 모드에서 PHP로 작업하면 변수를 확인하거나 초기화하기 전에 사용 중인 변수에 대해 경고하는 데 도움이 됩니다(따라서 비정상적인 데이터가 작동되는 것을 방지할 수 있음).