0

내가 준비된 문 그러나 다만 "정상"쿼리처럼 사용하지 않는 PDO를 사용하여, 지금 PHP5에서 프로그래밍 해요 :PHP : 반드시 htmlspecialchars 및 실제 이스케이프 문자열 및 인용

$oQuery = $oDatabase->query(
    "SELECT 
    Content 
    FROM 
    CMS 
    WHERE 
    Title = '". $this->TITLE ."' 
    LIMIT 1" 
); 

$aItem = $oQuery->fetch(); 

echo stripslashes($aItem['Content']); 

를 지금 나는이 개 질문이 :

  1. 뭔가를 삽입하려는 경우 SQL 인젝션에 대한 충분한 보호 장치입니까?

    $something = quote($something); 
    
  2. 이 HTML SQL 주입을위한 충분한가요? ENT_QUOTES에서

    $something = htmlspecialchars($something, ENT_QUOTES); 
    

봐이이 대체 때문에이 약 '


무엇을?

$this->TITLE = mysql_real_escape_string($this->TITLE); 

$oQuery = $oDatabase->query(
    "SELECT 
    Content 
    FROM 
    CMS 
    WHERE 
    Title = '". $this->TITLE ."' 
    LIMIT 1" 
); 

$aItem = $oQuery->fetch(); 

echo stripslashes($aItem['Content']); 

아니면 준비된 문구를 사용해야합니까?

감사합니다.

답변

0

아니요, HTML과 SQL에는 상황에 따라 다른 특수 문자가 있습니다. 그래서 그들은 다른 상황에 민감한 치료가 필요합니다. 첫 눈에 유사한 것처럼 보일 수 double quotes 또는 single quotesMySQL string literals를 사용

에도 인용 HTML 속성 값 (특수 문자 및 다른 이스케이프 시퀀스의 다른 세트가있다. 특히, if MySQL uses backslashes for escape sequences, htmlspecialchars won’t prevent SQL injections in string literals.

0

난 당신을 생각 오해 몇 가지

HTML 인젝션 :..

htmlspecialchars는 특수 문자를 HTML 엔터티로 변환

그게 바로 웹 페이지에 데이터를 표시하는 데 도움이됩니다. 그러면 누군가가 HTML을 삽입하려고하지 않습니다. 예를 들어 :

echo '<p> Welcome: ' . htmlspecialchars($_GET['username']) . '</p>'; 

SQL 주입

당신은 대단한 PDO를 사용하는,하지만 당신은 쿼리를 준비하지 못했습니다.

준비된 진술의 모든 부분이 수동으로 이스케이프 처리되지는 않습니다.

귀하의 경우를 준비하지 않고 질문하는 것이 매우 좋지 않으므로 준비해야합니다.예를 들어이 매개 변수를하지 않는 경우에만이 query를 사용

$oQuery = $oDatabase->prepare(
    "SELECT 
    Content 
    FROM 
    CMS 
    WHERE 
    Title = :title 
    LIMIT 1" 
); 
$oQuery->execute(array('title'=>$this->TITLE)); 
$aItem = $oQuery->fetch(); 
$content = $aItem['Content']; 

$oDatabase->query("SELECT Content FROM CMS"); 

그렇지 않으면 항상 SQL 주입

을 방지하기 위해 준비