나는 스스로 PHP를 배우고 Strip_tags () 함수를 알게되었습니다. 이것이 보안을 높이는 유일한 방법입니까?

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

문제

저는 PHP를 처음 사용하고 여기에서 자습서를 따르고 있습니다.링크

사용자가 입력에 PHP 코드를 작성하고 기본적으로 사이트를 망칠 수 있다는 것은 매우 무섭습니까?

글쎄, 이제 나는 약간 편집증이었고, 나에게 약간의 습관이 있다면 그들을 크램하려고하는 것보다 박쥐에서 보안 모범 사례를 배우고 싶습니다.

나는 PHP를 처음 접했기 때문에 (말 그대로 이틀 전에 집어 들었습니다) 혼란스럽지 않고 쉽게 배울 수 있습니다.

내 사이트에서 Shenanigans를 방지 할 수있는 다른 방법은 무엇입니까? :디

도움이 되었습니까?

해결책

PHP 응용 프로그램을 개발할 때 명심해야 할 몇 가지 사항이 있습니다. strip_tags() 그 중 하나만 도움이됩니다. 실제로 strip_tags(), 효과적이지만 필요한 것보다 더 많은 일을 할 수도 있습니다. 위험한 캐릭터를 htmlspecialchars() 상황에 따라 선호해야합니다.

일반적으로 모든 것이 두 가지 간단한 규칙으로 이어집니다. 모든 입력을 필터링하고 모든 출력을 피하십시오. 이제 입력과 출력이 정확히 무엇인지 이해해야합니다.

출력은 쉽고 응용 프로그램이 브라우저로 보내는 모든 것이 출력이므로 사용하십시오. htmlspecialchars() 또는 데이터를 출력 할 때마다 다른 탈출 기능을 작성하지 않았습니다.

입력은 PHP 코드에서 하드 코딩되지 않은 데이터입니다. 포스트를 통해 양식에서 나오는 것, 쿼리 문자열에서 get, 쿠키, 모든 것 ~ 해야 하다 필요에 따라 가장 적절한 방식으로 필터링하십시오. 데이터베이스에서 나오는 데이터조차도 잠재적으로 위험한 것으로 간주되어야합니다. 특히 공유 서버에서는 앱에도 영향을 줄 수있는 방식으로 데이터베이스가 다른 곳에서 손상되었는지 알 수 없습니다.

데이터를 필터링하는 방법에는 여러 가지가 있습니다. 흰색 목록은 선택한 값 만 허용하고, expcted 입력 형식을 기반으로 검증하는 등을 허용합니다. 내가 제안하지 않는 한 가지는 사용자로부터 얻은 데이터를 수정하는 것입니다. 규칙에 따라 재생하도록하십시오. 기대하는 것을 얻지 못하면 청소를 시도하는 대신 요청을 거부하십시오.

데이터베이스를 다루는 경우 특별한주의를 기울인 경우 SQL 주입에 지불해야합니다. 이러한 종류의 공격은 데이터베이스에 보내는 쿼리 문자열을 제대로 구성하지 않으므로 공격자가 악의적 인 명령을 실행하려고 시도 할 수 있습니다. 항상 이스케이프 함수를 사용해야합니다 mysql_real_escape_string() 또는 더 나은, 준비된 진술을 사용하십시오 Mysqli 확장 또는 사용 pdo.

이 주제에 대해 더 많은 말이 있지만,이 점들은 당신을 시작해야합니다.

HTH

편집하다: "입력 필터링"을 통해 명확히한다는 것은 어떤 식 으로든 입력 데이터를 수정하지 않고 좋은 점과 나쁜 점을 결정한다는 의미입니다. 내가 말했듯이 브라우저에 출력하지 않으면 사용자 데이터를 수정하지는 않습니다.

다른 팁

Strip_tags가 실제로 사용하기 가장 좋은 것은 아니며 모든 경우에 보호하지는 않습니다.

HTML Purify :http://htmlpurifier.org/

들어오는 데이터를 처리하기위한 정말 좋은 옵션이지만 여전히 모든 사용 사례를 충족 시키지는 않지만 확실히 좋은 출발점입니다.

나는 그렇게 말해야한다 지도 시간 당신은 보안에 대해 약간 오도하는 것입니다.

$ _get & $ _post 값으로 직접 작업하고 싶지 않다는 점에 유의해야합니다. 항상 로컬 변수에 가치를 보내고 거기에서 작업하십시오. 직접 액세스 (또는 출력) $ _get & $ _post에 직접 액세스 할 때 값과 관련된 몇 가지 보안 영향이 있습니다.

이것은 말도 안됩니다. 로컬 변수에 값을 복사하는 것은 $ _get 또는 $ _post 변수를 직접 사용하는 것보다 더 안전하지 않습니다.

실제로, 모든 데이터에 대해 본질적으로 안전하지 않은 것은 없습니다. 중요한 것은 당신이 그것으로하는 일. 당신이 포함하는 $ _post 변수를 가질 수있는 이유는 완벽하게 합법적 인 이유가 있습니다. ; rm -rf /. 예를 들어 HTML 페이지에서 출력하거나 데이터베이스에 저장하는 데 적합합니다.

안전하지 않은 유일한 시간은 system 또는 exec. 그리고 그때 당신이 사용하는 변수에 대해 걱정해야 할 때입니다. 이 경우 화이트리스트와 같은 것을 사용하거나 적어도 가치를 실행하고 싶을 것입니다. escapeshellarg.

마찬가지로 데이터베이스로 쿼리를 보내거나 HTML을 브라우저로 전송하는 것 등 대상에 적합한 이스케이프 방법을 사용하여 다른 곳으로 보내기 직전에 데이터를 탈출하십시오.

Strip_tags는 모든 HTML 조각을 제거합니다. 보다 정교한 솔루션은 화이트리스트 (즉, 특정 HTML 태그 허용)를 기반으로합니다. 좋은 화이트리스트 라이브러리는 htmlpurifyer입니다 http://htmlpurifier.org/

물론 데이터베이스 측면에서 MySQL_REAL_ESCAPE_STRING 또는 PG_ESCAPE_STRING과 같은 기능을 사용합니다.

글쎄, 아마도 나는 틀렸다. 그러나 ... 모든 문헌에서, 나는 읽었다. 사람들은 htmlspellchars를 사용하는 것이 훨씬 낫다고 말합니다.

또한 입력 데이터를 캐스트해야합니다. (예를 들어, int의 경우, 사용자 ID인지 확인하는 경우).

글쎄, 미리, 데이터베이스를 사용하기 시작할 때 - mysql_escape_string 대신 mysql_real_escape_string을 사용하여 SQL 주입을 방지합니다 (일부 오래된 책에서는 mysql_escape_string이 여전히 작성되었습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top