2011-02-28 4 views
2

나는 분명히하기 위해 초보자입니다. XSS 공격을 막기 위해 데이터 이스케이프에 대해 많이 들었습니다. 실제로 어떻게합니까?PHP에서 출력을 이스케이프하는 방법

이 내가 현재하고있는 무슨이다 -

$s = mysqli_real_escape_string($connect,$_POST['name'])); 

이 충분한가요? 감사합니다.

+0

데이터로 무엇을하고 있는지 알려줄 필요가 있습니다. 그것을 데이터베이스에 삽입하고 있습니까? 또는 웹 사이트에서 출력 하시겠습니까? 데이터로 수행하는 모든 일에는 다른 형태의 위생이 필요합니다. –

+0

@pekoe both .... 하나의 파일에서 나는 받아 들여서 삽입한다 ... 다른 하나는 출력한다. – Chrism

+0

이제 $ s를 데이터베이스에 삽입 할 것을 고려하십시오. 충분히 안전합니까? – Chrism

답변

6

, 당신은 mysqli_real_escape_string()를 사용하여 문자열 탈출 숫자를 주조 (또는 준비된 문을 사용한다 둘 다) 및 화이트리스트 기반 필터링을 통해 식별자/운영자를 보호하십시오.

올바른 방법을 사용하면이 두 가지 방법 모두 필요합니다.

+0

답을 편집하여 도움이됩니다. –

0

코드 공격 (즉, SQL 주입 공격)에 대해 코드를 수정하기 시작한 경우 매개 변수화 된 쿼리를 확인하는 것이 좋습니다. 기본적으로 이러한 작업은 명령 (sql)과 컨텐츠 (입력)를 분리하므로 이름처럼 사용자가 입력 한 악의적 인 정보로 혼동 될 수 없습니다. 당신은 여기 PDO 설명서를 읽고 시작할 수 있습니다 :

당신은 PDO 클래스를 사용하여 시작 시도 할 수 http://php.net/manual/en/book.pdo.php을이 페이지 좋은 예 있습니다 http://php.net/manual/en/pdo.prepared-statements.php

<?php 
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); 
$stmt->bindParam(':name', $name); 
$stmt->bindParam(':value', $value); 

// insert one row 
$name = 'one'; 
$value = 1; 
$stmt->execute(); 

// insert another row with different values 
$name = 'two'; 
$value = 2; 
$stmt->execute(); 
?> 

그러나, 당신은 사용할 필요가 없습니다를 이름이 별도의 값이기 때문에 PDO, 당신은 내가, http://php.net/manual/en/mysqli.prepare.php

<?php 
/* Script A -- We are already connected to the database */ 

$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?, 100)"); /* Query 1 */ 
mysqli_stmt_bind_param($stmt, "si", $string, $integer); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_close($stmt); // CLOSE $stmt 
?> 

를 참조 또한 mysqli 사용할 수 있습니다 절대 SQL 명령이 될 수 없으므로 자동으로 안전합니다.

+0

어떻게하면됩니까? 어리석은 것에 대해 유감스럽게 생각합니다. – Chrism

+0

예제와 몇 가지 링크가 추가되었습니다. – Nanne

+0

이렇게하면 XSS 공격이 아닌 SQL 주입 공격을 방지 할 수 있습니다. – geoffspear

3

당신은을 mysqli_real_escape_string 출력보다는 htmlspecialchars를 사용해야합니다. 당신 출력 데이터는 반드시 htmlspecialchars() 다른 를 사용해야 HTML로 경우 데이터베이스에 데이터를 저장하는 경우

+0

출력이란 에코입니까? – Chrism

+0

@Chrism by Output 그는 ** 당신이 요청한 것과 동일한 출력 **을 의미합니다. 질문 제목에서 알림을 확인하십시오. –

+0

이 경우 출력은 "HTML 문서로 HTML로 삽입되는 항목"(자바 스크립트와 반대)을 의미합니다. echo, print,' Quentin

관련 문제