2011-02-09 4 views
1

그래서 나는 그것이 /home/content/s/a/m/p/l/e/users/profile/index.php를 생성하는 사용자 입력을 제공하는 웹 사이트를 가지고있다. 내 진짜 질문은이게 안전한가요? 이것은 내가 사용자 입력을 살균하려고 시도하는 것입니다. 더 많은 것이 있으면 알려주세요. 나는이 웹 사이트 개발에 비교적 새로운 오전 이후로는 계속해서 또 다시 동일한 정보를 얻을 수있는 데이터베이스를 사용하여 변형을 필요하기 때문에 이것은 좋은 방법 인 경우보안 및 PHP

strip_tags(html_entity_decode($mysqli->real_escape_string($title)), ALLOWED_TAGS); 
ALLOWED_TAGS = "<br><p><b><i><hr>"; 

, 내가 대신 단지가, 궁금 정보가있는 정적 페이지 또는 이것이 거대한 보안 구멍입니까? 나도 몰라! :) 나는 그들이 내가 여기에 설치 한 것과 일종의 XSS 공격을 할 수 있는지 모른다. 도와주세요!



마이클

P.S. 당신이 어떤 대답이나 제안이 있다면, 그것이 왜 있는지에 대한 통찰력을 주시겠습니까? 저는 컴퓨터 과학 분야의 학위를 가지고 있으므로, 빠르고 단순한 해결책이 아니라 어떻게 작동하는지 궁금합니다. 감사.

+0

쓰레기는 ALLOWED_TAGS = BR은, P, B, I, 시간이다. 나는 실제 태그를 넣을 수 없다는 것을 깨달았다 : – Michael

+2

더 나은 방법은 나중에 검색/편집을 위해 데이터베이스에 저장하고, 프로필 정보가 업데이트 될 때마다 정적 페이지를 재생성하는 것이다. 그렇게하면 정적 페이지를 검색하고 긴장을 완화하며 html 페이지에서 구문 분석하지 않고 나중에 수정할 수있는 핵심 데이터를 유지할 수 있습니다. –

+2

각 사용자의 파일 시스템에 물건을 만들지 마라. 다른 나라와 마찬가지로 데이터베이스에 저장하면된다. 너무 자주 페이지를 다시 생성 할까 걱정되는 경우 웹 서버 앞에 캐시를 남깁니다. –

답변

1

이 XSS 입력 유효성 검사는 끔찍합니다. html_entity_decode()은 필요한 것과 반대입니다. <p> 태그와 같은 태그 중 일부를 추가하면 event handler에서 자바 스크립트를 실행할 수 있습니다. 그래서 짧게이 코드는 xss를 멈추게하지 않습니다.

당신은 htmlspecialchars($var,ENT_QUOTES); 또는 htmlpurifer을 사용해야합니다. 만약 당신이 htmlpurifer 길을 가면 그 똥을 최신 상태로 유지해야합니다. 몇 주를 지나면 우회됩니다. oah와 htmlpurifer는 매우 계산적으로 비쌉니다. 왜냐하면 수천 개의 정규 표현식을 사용하기 때문입니다.

2

내 회사 기술 자료 용으로 컴파일 된 PHP 보안 체크리스트입니다. 도움이 될지도 모른다.

  • 는 사용되지 않는 기능을 사용하고 SQL 쿼리에 변수 값을 사용하는 경우
  • 항상 사용자의 입력을
  • 사용 장소 홀더를 확인 실천하지 마십시오.
  • SQL 쿼리에 항상 사용되는 변수를 이스케이프 처리합니다.
  • 설정 적절한 디렉토리 권한
  • 항상 세션 ID를 다시 생성 할 때마다 사용자가 로그인. (세션 ID 하이재킹을 피하려면)
  • 암호를 일반 텍스트로 저장하지 마십시오. 해시 된 값만 저장하십시오.
  • 웹 페이지에서 사용자 입력을 출력 할 때 항상 html 특수 문자를 확인하십시오. (HTML 태그는 XSS 공격에 사용될 수 있습니다.)
  • 이동하기 전에 배포 서버의 사양을 알아 두십시오.
  • 로그 항목이 저장된 디렉터리를 보호합니다.
  • 설정 register_globals의 해제
  • PHP 안전 모드에 유용 할 수 있습니다,하지만 그것은 버전 5.3 코드에서 사용하지
  • 하면 이후 사용되지 않으며, php.ini의
  • 에 설정 disable_functions를 사용하여 기능 시스템과 간부을 해제
  • 프로덕션/라이브 서버에서 display_errors를 off로 설정합니다.
  • 유효성 쿠키 데이터