2016-09-22 4 views
0

내가 PDO와 데이터를 페치 말할 수 페치반드시 htmlspecialchars()는

$stmt = $this->dbh->prepare("SELECT * FROM posts"); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    return $result; 

방법 I 뷰 페이지 에코 사용하여 결과를 표시하기 전에 반드시 htmlspecialchars()를 사용합니까? fetchall() 바로 뒤에 결과 배열을 이스케이프 처리하면 괜찮습니까? 아니면 뷰 페이지에서 모든 결과를 하나씩 이스케이프 처리해야합니까?

가져온 직후에 htmlspecialchars()를 사용하면 다음과 같이 작동합니까?

$stmt = $this->dbh->prepare("SELECT * FROM posts"); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    $results= implode(',', $results); 
    $results= htmlspecialchars($results); 
    $results= explode(',', $results); 
    return $results; 
+0

보기 페이지에서 수행 –

+0

이것은 프레젠테이션의 일부이기 때문에 모델,보기, 컨트롤러 응용 프로그램 프레임 워크의보기에서 처리해야합니다. MVC 프레임 워크를 올바르게 사용하고 있습니까? 그렇지 않은 경우, 왜 그렇게 열심히 일하는지, Symfony를 얻고 프레임 워크가 이러한 세부 사항을 처리하게하십시오. Symfony에는이 문제를 해결할 수있는 수많은 방법이 있습니다. – Halfstop

+0

그래, 내 자신의 CMS를 만드는 중이 야. 배우기를 원한다. MVC를 혼자서하고 있지만 일단 개념을 완벽하게 이해하면 절대적으로 프레임 워크를 사용할 것이다. –

답변

1

문제의 솔루션이 실제로 작동하는지 (Marc B가 지적했듯이) 무시하면 기술적으로는 이 중요하지 않습니다. 여기서은 페이지에 기록되기 전에 인코딩 된 값을 인코딩합니다. 따라서 설계 결정은 상당히 중요합니다.

비록 htmlspecialchars()가 XSS에 대한 성배는 아니지만 주목 해주십시오. 출력이 HTML 컨텍스트로 작성 될 때만 사용자를 보호하지만 예를 들어 Javascript에 쓰여지는 경우에는 그렇지 않습니다.

이 있다면 : 그것은 사용자 입력을 포함 할 수있는 경우이 경우

...your html content... 
<script type="text/javascript"> 
    var myvar = <?= myVar ?>; 
</script> 
... 

, myVar에()를 호출은 htmlspecialchars 충분하지 않다. 위의 예에서 실제로 XSS를 사용하기위한 특수 문자는 필요하지 않습니다. 동일한 내용이 <div onclick="myFun('something', <?=myVar?>)">에 적용됩니다. 여전히 자바 스크립트 컨텍스트이므로 다른 인코딩이 필요합니다.

XSS에 대한 전체 자습서는 여기에 대한 답변으로는 적합하지 않으며 믿지 않습니다. HTML 인코딩이 항상 충분하지 않다는 사실에 주목하고 싶습니다.

데이터베이스에서 데이터를 읽은 직후에 htmlspecialchars()를 적용하는 것은 잘못된 것이라고 생각합니다. 그 시점에서 데이터가 사용될 위치 (어떤 문맥이 쓰여지는지)에 대해서는 신경 쓰지 않기 때문입니다. 또한 코드에서 관심사가 분리 될 수도 있습니다.

그래서 실제로 인코딩 할 때까지 데이터를 인코딩하지 않을 것입니다. 사용하려는 인코딩을 알고 있기 때문입니다.

1

fetchAll은 배열의 배열을 반환합니다. 당신은 내부 배열 (필드/값)을 문자열로 변환하려고한다는 것을 의미하는 OUTER 배열 (행) 만 파싱하면 리터럴 문자열 Array,Array,Array,etc...이 생깁니다.

아니, 작동하지 않을 것입니다.

+0

array_walk를 사용하면 작업을 수행 할 수 있습니까? –

+0

시도해 보시지 않겠습니까? 기꺼이 도와 드리겠습니다. 우리는 당신을 위해 코드를 실행/디버깅하기 위해 여기에 온 것이 아닙니다. 특히 당신이 어둠 속에서 그냥 찌르고있을 때. –

+0

나는 htmlspecialchars()를 100 % 이해하지 못했고 보안이 확실한 지 알고 싶었고 PHP가 있는지 아직 알지 못했다. 나는 누군가가 올바른 방향으로 나를 가리킬 것이라고 생각했다. 나는 누군가가 내게 코드를 줄 것을 원한다고 말하지 않았다. 나는 array_walk로 할 수 있는지 물어 보았다. 그렇다. ....... –

관련 문제