2012-04-11 2 views
2

나는 내가 각을 열 수있는 생각을했다이반 자동

2- $foo = mysql_real_escape_string($_POST['foo']); 
3- mysql_query("update ... $foo ..."); 

해당 변환 할

1- mysql_query("update ... $_POST['foo'] ..."); 

같은 것들을 가지고 많은 파일이 안전하지 않은 PHP MySQL의 스크립트에 보안을 추가 파일을 선택하고 $_POST['foo'] (양식 1-) 키 조합을 누른 다음 자동으로 도구를 선택하십시오.

  • 내 clipboar에 넣기
  • , 3-에 텍스트 1- 텍스트를 대체

수동 $foo = 물품 눌러 CTRL + V 2-

난 생성한다 (2-에 추가) D mysql_real_escape_string($_POST['foo']); 메모장 ++ 및 핑거 텍스 (fingertext)라는 플러그인을 사용하여 매크로를 만들려고했지만 성공하지 못했습니다.

의견이 있으십니까?

+1

이 질문과 같은 소리는 텍스트 편집기 또는 매크로와 관련이 있습니다. –

+0

모든 솔루션을 기꺼이 사용하고 있지만 텍스트 편집기 나 매크로를 사용하는 것을 선호합니다 (메모장 ++뿐만 아니라 창문뿐만 아니라 리눅스도 포함) – jperelli

답변

3
$_POST = sanitize($_POST); 
$_GET = sanitize($_GET); 

    function sanitize($input) { 
     if (is_array($input)) { 
      foreach($input as $var=>$val) { 
       $output[$var] = sanitize($val); 
      } 
     } else { 
      if (get_magic_quotes_gpc()) { 
       $input = stripslashes($input); 
      } 
      $output = mysql_real_escape_string($input); 
     } 
     return $output; 
    } 

이건 완벽한 건 아니지만, 당신은 안전하지 않은 페이지를 많이 가지고 모두가 보안을 위해 빠른 수정이 필요하면, 당신은 MySQL의에 연결 한 후이를 넣을 수 있습니다. 또한 쿼리에 인용되지 않은 숫자 변수가있는 경우 숫자임을 확인하거나 쿼리에서 사용하기 전에 캐스트해야합니다. mysql_real_escape_string()은 따옴표로 묶인 값에서만 작동합니다 (예 : blah_column = 'value', 그러나 blah_column = value는 제외).

+0

Nice. 내부의 vars가 문자열이 아니라 int 인 경우에만 문제가 발생합니다. 나는 그것이 일부 캐스트 + 예외 메커니즘을 사용할 수있을 것 같아요. 나는 적절하게 시도하고 편집 할 것이다 – jperelli

2

손으로 하나씩 교체하십시오. 보안에 관심이 있다면 autoreplace를 만들지 마십시오. 또한 적어도 mysql_real_escape_string(() 대신에 기능을 만드십시오.

//just for example, better can be written 
function db_escape($var, $type = 'string') 
{ 
    if($type == 'string') return mysql_real_escape_string($var); 
    if($type == 'integer') return (int) $var; 
    if($type == 'float') return (float) $var; 
} 
+0

왜 나는 그 기능이 필요할 것인가? 당신은 더 나은 유지 보수를 위해 그것을 의도합니까? – jperelli

+0

@jperelli의 예입니다. 당신은 더 좋은 것을 쓸 수 있습니다. – safarov