문제

알겠습니다.이 주제는 온상입니다. 이 상황은 코드로 사용하는 것에 따라 달라진다는 것도 알고 있습니다. 해결해야 할 세 가지 상황이 있습니다.

  1. 사람들이 쉼표, 물결표 등을 사용하는 댓글과 발언을 할 수 있도록 허용해야하지만 여전히 공격으로부터 안전하게 보호해야하는 양식이 있습니다.

  2. 다음과 같은 날짜를 입력하는 사람이 있습니다 : 10/13/11 mm / dd / yy (영어로),이 항목을 삭제해도 되나요?

  3. htmlspecialchars(), htmlentities()real_escape_string()를 올바르게 사용하는 방법을 어떻게 이해합니까? 나는 php.net 사이트와 여기에 몇 가지 게시물을 읽었지만 이것이 정답이 무엇인지 질문을 읽는 사람에 달려있는 상황 인 것 같습니다.

    정말로 받아 들일 수 없습니다. 여기에 게시하는 것과 유사한 텍스트 형식이 삭제 될 수있는 답변이 있어야합니다. 그것이 가능한지 그리고 어떻게 가능한지 알고 싶습니다.

    감사합니다 ... 다른 곳에서이 질문을 할 때 짜증나는 경향이있는 것 같기 때문에 ... 제가 알아야 할 것을 배우고 있지만, 무엇을 의미하는지에 대한 예 ...

    미리 감사합니다.

도움이 되었습니까?

해결책

매우 중요한 질문이며 실제로 인코딩 형식으로 간단한 답변을 제공합니다. 당신이 직면하고있는 문제는 동시에 많은 언어를 사용한다는 것입니다. 먼저 HTML, PHP, 그리고 몇 초 후에 SQL에 있습니다. 이 모든 언어에는 고유 한 구문 규칙이 있습니다.

기억해야 할 것은 문자열은 항상 적절한 인코딩이어야한다는 것입니다.

예를 들어 보겠습니다. HTML 양식이 있고 사용자가 다음 문자열을 입력합니다.

I really <3 dogs & cats ;')

제출 버튼을 누르면이 문자열이 PHP 스크립트로 전송됩니다. 이것이 GET을 통해 수행된다고 가정합시다. 고유 한 구문 (예 : & 문자에는 특별한 의미가 있음)이있는 URL에 추가되므로 언어를 변경합니다. 이는 문자열이 적절한 URL 인코딩으로 변환되어야 함을 의미합니다. 이 경우 브라우저가이를 수행하지만 PHP에는이를위한 urlencode 기능도 있습니다.

PHP 스크립트에서 문자열은 PHP 문자열로 인코딩 된 $_GET에 저장됩니다. PHP를 코딩하는 한 완벽합니다. 하지만 이제 SQL 쿼리에 사용할 문자열을 입력 해 보겠습니다. 언어 및 구문 규칙을 변경하므로 문자열은 mysql_real_escape_string 함수를 통해 SQL로 인코딩되어야합니다.

다른 쪽 끝에 문자열을 다시 사용자에게 표시 할 수 있습니다. 데이터베이스에서 문자열을 검색하면 PHP 문자열로 반환됩니다. 출력을 위해 HTML에 임베드하려면 언어를 다시 변경하므로 htmlspecialchars 함수를 통해 문자열을 HTML로 인코딩해야합니다.

전체적으로 문자열은 항상 적절한 인코딩으로되어 있습니다. 즉, 사용자가 생각할 수있는 모든 문자가 그에 따라 처리됩니다. 모든 것이 원활하고 안전하게 실행되어야합니다.

피해야 할 사항 (때로는 무지한 사람이 권장하는 경우도 있음)은 문자열을 너무 일찍 인코딩하는 것입니다. 예를 들어 htmlspecialchars를 데이터베이스에 배치하기 전에 문자열에 적용 할 수 있습니다. 이렇게하면 나중에 데이터베이스에서 문자열을 검색 할 때 문제없이 HTML에 붙일 수 있습니다. 좋은 생각이야? 예, PDF 영수증이 유전자 코드 코드 정크로 가득 찬 이유를 궁금해하는 사람들의 지원 티켓을 받기 전까지는 정말 좋습니다.

코드 :

form.html : 라코 디스

생성 URL : 라코 디스

post.php : 라코 디스

다른 팁

중요한 것은 사용할 수있는 각 살균 기능이 무엇이며 언제 사용해야하는지 이해하는 것입니다. 예를 들어, 데이터베이스 이스케이프 기능은 데이터를 데이터베이스에 안전하게 삽입 할 수 있도록 설계되었으며 그대로 사용해야합니다. 그러나 HTML 이스케이프 기능은 악성 HTML 코드 (예 : JavaScript)를 무력화하고 사용자가 볼 수 있도록 데이터를 안전하게 출력하도록 설계되었습니다. 적시에 올바른 것을 살균하십시오. *

  • 사용할 수있는 기본 접근 방식에는 두 가지가 있습니다. HTML을 수신 할 때 삭제하거나 수신 한 그대로 저장하고 사용자에게 출력 할 때만 삭제하는 것입니다. 이러한 각 방법에는 지지자가 있지만 두 번째 방법은 문제 발생 가능성이 가장 적을 것입니다 (첫 번째 방법에서는 삭제 절차에서 결함이 발견되고 데이터베이스에 저장된 콘텐츠가 불충분하게 삭제 된 경우 어떻게 하시겠습니까? ?)

    날짜 파싱 기능을 사용하여 날짜를 정리할 수 있습니다. PHP에서는 strtotime () 을 볼 수 있습니다. 일반적으로 목표는 날짜의 문자열 표현을 가져 와서 날짜를 나타내는 객체 또는 표준 방식 (즉, 특정 형식)으로 동일한 날짜를 나타내는 다른 문자열을 출력하는 것입니다.

날짜 삭제와 관련하여 PHP에는 유용한 내장 함수가 있습니다.strtotime () 함수는 상상할 수있는 거의 모든 날짜 / 시간 형식을 Unix 타임 스탬프로 변환 한 다음 date () 함수에 전달하여 원하는 형식으로 변환 할 수 있습니다.

예 :

$ date_sql= date ( "Y-m-d", strtotime ($ _POST [ "date"]));

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