많은 PHP 프로그램의 주요 약점은 PHP 언어 자체의 문제가 아니라 프로그래머의 낮은 보안 인식에서 비롯됩니다. 따라서 잘못된 데이터 제출로 인해 발생할 수 있는 영향을 발견하려면 각 코드 부분에서 발생할 수 있는 문제에 항상 주의를 기울여야 합니다.
예제 #1 위험한 변수 사용
<?php // 从用户目录中删除一个文件,或者……能删除更多的东西? unlink ($evil_var); // 记录用户的登陆,或者……能否在 /etc/passwd 添加数据? fwrite ($fp, $evil_var); // 执行一些普通的命令,或者……可以执行 rm -rf * ? system ($evil_var); exec ($evil_var); ?>
항상 코드에 주의를 기울여 클라이언트에서 제출된 모든 변수가 제대로 검사되었는지 확인하고 다음 질문을 자문해 보세요.
이 스크립트는 의도한 파일에만 영향을 미치나요?
비정상적인 데이터를 제출하면 효력이 발생하나요?
이 스크립트가 의도하지 않은 목적으로 사용될 수 있나요?
이 스크립트를 다른 스크립트와 결합하여 나쁜 일을 할 수 있나요?
모든 거래가 적절하게 문서화되어 있습니까?
코드를 작성할 때 스스로에게 다음 질문을 해보세요. 그렇지 않으면 나중에 보안을 강화하기 위해 코드를 다시 작성해야 할 수도 있습니다. 이러한 문제에 주의를 기울이면 시스템의 보안을 완전히 보장할 수는 없더라도 최소한 보안성을 향상시킬 수는 있습니다.
또한 프로그래밍을 더욱 편리하게 해주지만 변수의 합법성, 소스 및 값을 망칠 수 있는 Register_globals, Magic_quotes 또는 기타 설정을 끄는 것도 고려해 보세요. 개발 중에 error_reporting(E_ALL) 모드를 사용하면 변수를 사용하기 전에 검사 또는 초기화되었는지 확인하여 비정상적인 데이터가 엉망이 되는 것을 방지할 수 있습니다.