2009-10-06 8 views
31

PHP 코딩에 다소 익숙하며 PHP 코드를 삭제하지 않으면 악의있는 ​​사용자가 웹 사이트를 해킹 할 수 있음을 알고 있습니다. 내가 궁금해하는 부분은 데이터 제출 상자 (파일 제출, 사용자 이름/비밀번호 입력 필드 등)가 필요한지 여부입니다.PHP는 얼마나 안전합니까?

"include (header.php)"와 같은 명령도 일종의 보안이 필요하거나 본질 안전입니까?

+0

전망이다. 나는 제목이 너가 묻고있는 질문을 위해 너무 막연하거나 일반적이라고 생각한다. – codingbear

답변

22

사용자를 신뢰하지 마십시오.

include "a/literal/file.php"; 

include $someFile; 

당신이 $ someFile가 설정됩니다 방법에 대해 생각하고 싶지 의미 매우 안전합니다. 사용자가 $ someFile의 값을 설정하기 위해 지정한 데이터를 사용하면 위생적으로 처리하는 것이 좋습니다.

+4

... 사용자 입력을 기반으로 포함을 선택해야하는 경우 항상 유효하고 안전한 것으로 알고있는 포함 목록을 만든 다음 사용자 입력을 해당 목록의 값과 일치시키고 -에 대해 안전 목록 값 자체 만 사용하십시오. 포함. –

56

다른 언어와 마찬가지로 PHP 코드는 프로그래머가 작성한만큼 안전합니다.

다른 언어와 마찬가지로 개별 (및 공통) 보안 위험 요소가 너무 많아서 StackOverflow 응답에 포함시키기에 너무 자세합니다.

보안 PHP 코딩에 대한 책을 찾으십시오.

+30

+1 많은 사람들은 PHP를 사용하여 안전하지 않은 코드가 많이 작성 되었기 때문에 PHP가 안전하지 않은 언어라고 생각합니다. 이것은 PHP가 비교적 가벼운 초기 학습 곡선을 가지고 있기 때문에 안전하지 않은 프로그래머에게 불안한 코드를 뱉어 내릴 기회를 제공하기 때문입니다. 또한 PHP는 널리 배포되어있어 불안한 프로그래머가 프로젝트를 수행 할 확률이 높아집니다. – snicker

+8

- PHP 보안에 관한 책 - Chris Shiflett (http://oreilly.com/catalog/9780596006563/)의 "Essential PHP Security"를 권하고 싶습니다. - 그 꽤 포괄적인데, 따라하기가 실제로 어렵지 않다는 것을 보여줍니다. 안전하고 안전하며 코드 관행. – HorusKol

5

PHP는 무엇보다도 안전합니다. 그러나 기본적으로 프로그래머의 기술에 의존하지는 않습니다. .NET과 달리 기본적으로 보안을 유지하는 경향이 있습니다.

경로가 역학적으로 생성되는 경우 포함하면 안전합니다.

include (header.php);

은 상대적이다 : 아래

include("mypath/myfile.php"); 
+0

이것은 옛날에 사실 일 수 있습니다. (몇 년 전), 우리는 기본적으로 보안을 위해 http://framework.zend.com/을 돕는 경향이있는 PHP로 MVC 프레임 워크를 확보했습니다. –

1

귀하의 질문은 당신이 만든 특정 시점이 아니라 광범위하고 일반적이지만 해결하기 위해 무해한 (myfile.php의 코드에 따라)입니다 안전하지만

include ($header);

은 잠재적으로 위험한 보안 구멍입니다. $header이 지정되었으며 위생 처리 된 경우.

+0

전자의 가장 큰 이점은 더 이상 볼 필요가 없다는 것입니다. 이는 로컬로 안전합니다. (상당히 큰 코드베이스에서 감사해야하는 사람으로서, 그것은 저에게 중요합니다.) –

1

특별히 질문에 답하기 위해 PHP는 언어로서 매우 안전합니다. 언어 자체의 경우 언어 기반 보안을 유지하기 위해 최신 안정 빌드를 사용하는 것이 좋습니다. PHP 유지자가 버그를 만들고 수정하는 사람입니다.)

4

여기 모두와 동의하십시오. - PHP는 다른 언어보다 그 자체로 안전성이 높습니다.

그럼 php.ini 파일을 자세히 살펴 봐야합니다. 당신은 아마 모든 지시어에 대해 배워야 할 것입니다. 이것은 많은 사람들이 일찍 실수를하는 곳입니다.

4

데이터 입력 상자와 관련하여 SQL 주입 공격, 오버플로, 불량 문자 등이 염려되어야합니다. 우선 filter_var(), mysql_real_escape_string(), pg_escape_string()과 같은 기능을 확인하십시오.

+1

그리고 웹 페이지로 다시 데이터를 반향시킬 때'htmlentities'. – DisgruntledGoat

7

sla.ckers에서 RSnake를 인용하십시오.2006 년 org post :

흥미로운 점은 Stefan Esser가 PHP 사고 대응 팀에서 은퇴했다는 것입니다. 이사회에 대한 종교적 전쟁을 시작하지는 않겠지 만, PHP의 보안 대응 팀 창립자가 PHP의 보안 부족에 시달리고 결과적으로 그만 두는 것이 흥미 롭습니다. 그의 사이트는 순간 다운 (트래픽의 홍수?) : [blog.php-security.org] 그래서 여기 캐시의 잘라 내기 및 붙여 넣기입니다 :

12월 (토요일) 9. 2006

마지막 밤 나는 마침내 PHP Security Response Team에서 은퇴했습니다. 그것은 처음에는 몇 년 전의 아이디어였습니다.

이유는 많습니다. 그러나 가장 중요한 점은 내부에서 PHP 보안을 향상시키려는 시도가 효과가 없다는 것을 깨달았 기 때문입니다. PHP 그룹은 PHP 보안 문제를 사용자에게 비난하려고하자마자 보트로 뛰어 들지만, PHP 자체의 보안을 비판하는 순간 비 개인적인 성향을 갖게됩니다. 나는 PHP에서 보안 구멍을 공개하거나 Suhosin을 개발하여 부도덕 한 배신자라고 불린 시간을 계산하지 않았습니다.

일반 PHP 사용자의 경우 이는 더 이상 내 권고의 보안 구멍에 대한 응답 시간이 느려지는 것을 의미하지 않습니다. 또한 PHP Security Response Team이 수개월 동안이를 수정하기를 거부했기 때문에 내 권고 중 일부는 패치없이 제공 될 것입니다. 또한 PHP의 보안 허점에 대해 더 많은 권고가있을 것이라는 의미입니다. 10시 58분

음에서 PHP, 보안 스테판 ESSER에 의해 게시

, 즉 소리 무서운, 나는 마침내 PHP 보안에 "진짜 거래"를 얻을 정말 흥분. 나는 항상 조금주의를 기울 였고 Stefan이 무엇을 말하고 있는지 보는 것이 흥미로울 것입니다.

소스 : http://sla.ckers.org/forum/read.php?2,3976 멋지게 강화 된 PHP 프로젝트, PHP 버그의 수호신 http://www.hardened-php.net/suhosin/ 및 ESSER의 월을 소개

당신은 더 구체적으로 제목을 확인 할 수 있습니다 http://www.php-security.org/

관련 문제