2014-01-06 2 views
5

나는 이것에 약간 혼란 스럽다. htmlspecialchars()에 대해 읽었으며 XSS 공격을 막기 위해 텍스트 영역 POST에 사용할 계획입니다. 대개 htmlspecialchars()은 브라우저로 전송되는 HTML 출력을 생성하는 데 사용됩니다. 하지만 확실하지 않은 부분은 다음과 같습니다.MySQL에 삽입하기 전에 htmlspecialchars()를 사용하는 것이 좋습니까?

1) MySQL에 삽입하기 전에 htmlspecialchars()을 사용자 입력 데이터에 사용하는 것이 안전한 방법입니까? SQL Injection을 방지하기 위해 이미 매개 변수화 된 값으로 PDO 준비 문을 사용하고 있습니다.

2) 또는 htmlspecialchars()을 매개 변수화 된 값으로 사용하는 것에 대해 걱정할 필요가 없으며 MySQL에서 결과를 가져 와서 사용자에게 표시 할 때만 htmlspecialchars()을 사용합니까?

+5

# 2는 정답입니다. – jszobody

+5

HTML 이스케이프 처리 (1)는 데이터베이스와 관련이 없습니다. 조기 탈출은 나중에 웹 페이지가 아닌 출력 채널을 방해 할 수 있으므로 일반적으로 (2)를 사용하는 것이 좋습니다. 초보자에게는 초기 HTML 이스케이프 처리가 여전히 권장 될 수 있습니다. 너무 일찍 잊어 버린 것보다 빠릅니다. – mario

+1

일부 텍스트 로그를 생성하려고한다고 가정합니다. 그런 다음 탈출을 취소해야합니다. 마지막으로 적절한 순간에 탈출하여 적절하다고 판단하십시오. –

답변

11

다른 사람들이 지적한 것처럼 # 2가 정답입니다. 필요할 때까지 "원시"로두고 적절하게 탈출하십시오.

왜 (그리고 나는 다른 게시물을 반복/요약 할 것인가)에 대해 자세히 설명하기 위해 시나리오 1을 논리적 인 극단으로 가져가 봅시다.

누군가가 "' OR 1=1 <other SQL injection> --"을 입력하면 어떻게됩니까? 아마도 당신은 SQL을 사용하기 때문에 (아마도 매개 변수화 된 명령문을 사용하지 않았기 때문에) SQL을 인코딩해야한다고 결정했을 것입니다. 이제 SQL & HTML 인코딩을 혼합 (또는 결정)해야합니다.

갑자기 상사가 XML 출력을 원한다고 결정합니다. 이제 패턴 일관성을 유지하기 위해 인코딩도 필요합니다.

다음 CSV - 오, 안돼! 텍스트에 따옴표와 쉼표가 있으면 어떻게됩니까? 더 탈출!

안녕하세요 - 좋은 양방향 AJAX 인터페이스는 어떨까요? 이제 JSON을 브라우저로 다시 보내고 싶으므로 {, [등등 모두 고려해야합니다. 도움!! 그래서 명확하게

는 (물론 도메인 제약 조건에 따라) 주어진 데이터를 저장하고 당신이 그것을을 필요로하는 시간에 출력 에 적절한 인코딩합니다. 출력이 귀하의 데이터와 다릅니다.

이 답변이 너무 애호하지 않기를 바랍니다. 다른 응답자에게도 도움이됩니다.

+0

제게 요약 해 주시고 # 2가 가장 좋은 방법이 될 이유를 설명해 주셔서 감사합니다. :) – Neel