2014-01-16 9 views
-1

이것은 stackoverflow에서의 첫 번째 게시물입니다. 나는 몇 가지 간단한 요청해야 : D 질문이 나를 도와 수 :PHP - 매직 큐트가 꺼져있을 때 문자열을 살균해야합니까?

1) 좋아, 그럼 난 실행할 때 get_magic_quotes_gpc를 누구나 PHP 살균 입력 정말 감사() false를 반환과 관련. 마술 따옴표가 꺼져있는 것을 의미합니다. 이 올바른지?

2) 마술 따옴표를 끄면 stripslashes(), htmlentities() & strip_tags()를 사용하여 사용자가 입력 한 문자열을 삭제해야합니까?

3) \ 또는 다른 문자와 같은 문자를 입력 할 때 마법 인용 부호가 꺼져 있어도 내 프로그램에는 피할 수 없습니다. 왜 그런가요?

4) 그런 다음 처리하기 전에 문자열을 지우는 함수를 호출하도록 프로그램을 수정했습니다. 문자열이 지워졌음에도 불구하고 여전히 원하지 않는 문자가 표시됩니다. 3) 질문에 관련된 내 코드입니다 (이 프로그램은 섭씨 또는 그 반대)

<!DOCTYPE html> 
<html> 
    <head> 

    </head> 

    <body> 

     <form action="TemperatureConverter.php" method="post"> 
      <label>Fahrenheit</label><input type="text" name="f" size="10"/><br> 
      <label>Celsius</label><input type="text" name="c" size="10"/><br> 
      <input type="submit" name="submit" value="SUBMIT"> 

     </form> 


    </body> 


</html> 




<?php 
$f=''; 
$c=''; 

if(isset($_POST["f"])){ 
    $f= sanitizeString($_POST["f"]); 
} 
if(isset($_POST["c"])){ 
    $c=sanitizeString($_POST["c"]); 
} 

if($f!=""){ 
    $c=(5/9)*($f-32); 
    echo $f.' Fahrenhite is equal to '.$c.' Celsius '; 
} 
else if($c!=""){ 
    $f=$c*(9/5)+32; 
    echo $c.' Celsius is equal to '.$f.' Fahrenhite '; 
} 

function sanitizeString($str){ 
    $str= stripslashes($str); 
    $str= htmlentities($str); 
    $str= strip_tags($str); 
    return $str; 
} 

에 화씨로 변환하도록되어 sanitizeString에 아무 잘못() 함수 아래

이되는 것 같아요 나는 게시 내 코드는 제대로 stackoverflow의 규칙을 준수합니다. 미안하지만. 당신이 수를 할 입력을 알고 :(당신의 예에서

+2

해당 컨텍스트에 가져올 때 가져온 특정 _context_에 따라 데이터를 처리해야합니다. 어떤 데이터라도 "stripslashes, htmlentities and strip_tags"를 그냥 사용하는 것은 말도 안됩니다. 이 주제는 이미 많이 논의되었으므로 일부 연구를 수행하십시오. – CBroe

+0

PHP의'filter' 함수 [here] (http://www.php.net/manual/en/book.filter.php)를 살펴 봐야합니다. 그들은 사용하기 까다 롭지 만, 입력을 살균하고 검증하기위한 광범위한 옵션을 제공합니다. –

답변

0

, 단순히 오히려 추가 필터링을 추가하지는 않고, 그 확인하기 위해 가장 좋은 것입니다. 예를 들어

,

if(isset($_POST["f"])){ 
    $inFahrenhite = trim($_POST['f']); // remove any leading/trailing spaces 
    if (is_numeric($inFahrenhite)) $f = $_POST['f']; 
} 

위의 코드는 당신이 다른 숫자 아무것도 잘못된 무시할 수 있습니다 기대되기 때문에 입력이. 숫자임을 확인합니다.

다른 질문.

  1. 예, 설정이 해제되었음을 의미합니다.
  2. 모든 필터가 필요하지 않습니다. 입력이 숫자 여야 할 경우 html 값을 허용 할 필요가 없습니다. http://www.php.net/manual/en/book.filter.php을 사용하면 시작할 수 있습니다.
  3. 매직 쉼표는 특정 문자 만 이스케이프합니다. 설정은 더 이상 사용되지 않으므로 사용하지 않아야합니다.
  4. 이 함수는 문자가 올바르게 이스케이프 처리되는지 확인하는 데에만 사용됩니다. 예를 들어 &&amp;으로 변환됩니다. 아직 &이 있지만 이제는 다른 목적이 있습니다.
0

기본적으로 위생 처리가 잠재적 인 취약성을 피하기 위해 데이터를 자동으로 수정하는 마법 과정임을 제안하는 오래된 저조한 PHP 자습서가 있습니다. 많은 개발자들이이를 사실로 받아들이고 실제 기능을 찾기 위해 설명서를 보지 않고도 권장 기능을 적용합니다. 따라서 취약한 응용 프로그램을 작성할뿐만 아니라 프로세스에서 합법적 인 사용자 데이터를 손상시킵니다.

내 조언 :

  1. 는 처음 사용하는 기능에 대한 문서를 읽어
  2. 함수가 그 문제를 해결하기 위해 무언가를 여부를 생각 해결하기 위해 필요한 문제를 이해

For instance :

,

strip_tags - 스트립 HTML과 PHP 태그 문자열에서

예 # 1 strip_tags() 예를

<?php 
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; 
echo strip_tags($text); 
echo "\n"; 

// Allow <p> and <a> 
echo strip_tags($text, '<p><a>'); 
?> 

당신은 온도 변환 도구가 있습니다. 화씨 (Fahrenheit)도에서 HTML 태그를 제거하는 것이 의미가 있습니까?

하지만 HTML 스 니펫을 게시 할 사이트가 있다고 가정 해 보겠습니다. 이제 HTML이 생겼습니다. HTML 함수를 사용하는 것이 맞습니까? 하지만, 왜 으로 HTML 코드에서 HTML을 제거 하시겠습니까? 당신은 당신의 사이트를 쓸모 없게 만들 것입니다! 해결해야 할 문제는 해당 스 니펫을 사이트에 삽입하여 렌더링되지 않고 원시 HTML로 표시되도록하는 것입니다. 그렇게하려면 예를 들어 각 < 기호를 &lt;으로 변환하십시오.