문제

항상 혼란스러워하는 한 가지는 입력 탈출과 SQL 주입과 같은 공격으로부터 보호되는지 여부입니다.

HTTP Post를 사용하여 데이터를 PHP 파일로 보내는 양식이 있다고 가정 해 봅시다. 입력 필드에 다음을 입력하고 양식을 제출합니다.

"Hello", said Jimmy O'Toole.

이 게시물 데이터를 수신하는 PHP 페이지의 입력을 인쇄/에코하면 다음과 같이 나옵니다.

\"Hello\", said Jimmy O\'Toole.

이것이 혼란스러워하는 지점입니다. 이 입력 문자열을 (내) SQL에 넣고 실행하면 데이터베이스가 정밀하게 들어가게됩니다 (따옴표가 피해서) SQL 주입을 중지합니까?

입력 문자열을 가져 와서 다음과 같은 것을 호출하는 경우 mysqli real_escape_string 그것에, 그것은 다음과 같이 나옵니다.

\\"Hello\\", said Jimmy O\\'Toole.

따라서 (내) SQL을 통해 데이터베이스에 들어가면 다음과 같이 끝납니다.

\"Hello\", said Jimmy O\'Toole.

이것은 분명히 슬래시가 너무 많습니다.

따라서 입력이 탈출 한 HTTP 게시물을 통해 오면 (내) SQL에 안전하게 만들기 위해 다시 탈출해야합니까? 아니면 여기서 명백한 것을 보지 못합니까?

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

아, 불가사의 마법 인용문. 그것은 당신의 게시물 양식에서 불필요한 탈출을 만들고 있습니다. 당신은 그들을 비활성화 (또는 중화)해야하며 많은 두통이 사라집니다.

다음은 주제에 대한 예시적인 기사입니다. http://www.sitepoint.com/blogs/2005/03/02/magic-quotes-headaches/

요약 : 마법 따옴표를 비활성화하고 사용하십시오 real_escape_string().

다른 팁

탈출에 의존하는 대신 매개 변수화 된 SQL 쿼리를 사용하고 MySQL 드라이버가 필요한 모든 것을 피할 수 있도록합니다.

PHP 서버가있는 것 같습니다 마법 인용문 기능 활성화 - 첫 번째 슬래시 세트가 나오는 곳입니다. 이론적으로는 탈출 기능을 호출하는 것이 불필요해야합니다. 그러나 앱이 마법 따옴표가 장애가있는 서버에서 실행되면 갑자기 SQL 주입에 넓게 열려 있지 않다고 생각합니다.

차크리트가 썼 듯이, 탈출은 자신을 보호하는 가장 좋은 방법이 아닙니다. 사용자에게는 훨씬 안전합니다. 매개 변수화 쿼리.

무슨 일이 일어나고 있는지는 당신이 가지고 있다는 것입니다 마법 인용문 PHP 구성에서 켜졌습니다.

이것의 고도로 YouTurn Magic은 인용문을 꺼내는 것이 좋습니다. 실제로 PHP 6에서 완전히 제거되었습니다.

마법 따옴표를 비활성화하면 게시 된 텍스트가 양식으로 입력 한대로 정확하게 돌아 오는 것을 볼 수 있습니다. "Hello", said Jimmy O'Toole.MySQL 이스케이프 함수 또는 더 나은 준비된 진술을 사용해야한다는 것은 이제 명백합니다 (준비된 진술과 함께 문자열이 당신을 위해 행해지는 것을 잊을 수 없습니다).

해커의 키워드입니다.

나는 정상적으로 탈출하는 것이 충분하다고 생각하지만 단지 인용문만으로는 충분하지 않을 수 있습니다.

이것 좀 봐 SQL 주입 치트 시트, 그것은 당신이 실행할 수있는 좋은 테스트 목록이며 너무 많은 슬라 즈가 좋은지 아닌지 볼 수 있습니다.

그리고 다른 종류의 값을 피하는 것을 잊지 마십시오. 즉, 숫자 필드와 DateTime 필드는 모두 문자열만큼 쉽게 주입 할 수 있습니다.

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