2009-10-29 5 views
4

최근에 클라이언트가 내 사이트에서 감사를 실행했습니다. 사람들이 데이터베이스에 잠재적 인 손해를 입힐 수 있기 때문에 입력 데이터를 조금 더 잘 살균 할 수 있다는 것이 그 중 하나입니다.사용자 입력을 삭제하려면 어떻게해야합니까?

아래 함수는 현재 사용하고있는 프로그램이며 (이전 개발자의 나머지 부분) 잠재적 인 문제가있는 곳을 볼 수 없습니다.

데이터베이스로 전달되는 문자열은 XML을 통해 표시되며 Flash 응용 프로그램에서 읽습니다.

아무도 내가 누락되었을 수 있습니다. 감사합니다.

function secure_string($string) 
{ 
    return (strip_tags(addslashes(mysql_real_escape_string(
         stripslashes($string))))); 
} 
+1

쇼 당신이 아닌 현재 함수에 대한 해당 문자열을 필요. 보호는 당신이 경계하고 싶은 것에 달려 있습니다. – scragar

+0

@scragar, MySQL injection. 적어도 그는 고객이 다음과 같이 말했습니다 : "데이터베이스에 잠재적 위험". – Frankie

+7

필자는 php (더 이상)를 사용하지 않지만 솔직히'addslashes'와'stripslashes'를 하나의 체인으로 호출하면 확실히 눈에 띄게됩니다. – shylent

답변

5

새로운 PHP 함수 filter_var()을 입력 청소에 사용하는 것이 더 좋습니다. 새롭고 더 나은.

+0

고마워. filter var는 지금까지 최선의 선택처럼 보입니다. – Drew

5

그 기능이 너무 복잡해 보입니다. mysql_real_escape_string()은 이미 탈출해야하는 모든 것을 이스케이프 처리하므로 addslashes()을 실행할 필요가 없습니다. 사실, 백 슬래시를 피함으로써 더 많은 피해를 줄 수 있습니다. mysql_real_escape_string() 만듭니다.

+0

힌트를 위해, mysql_real_escape_string()과 같은 함수가 존재하지만 postgresql을 위해서? pg_escape_string 또는 pg_escape_bytea가 주사에 대해 작동하지 않는 것 같습니다. – Strae

+0

'pg_escape_string'이 어떻게 작동하지 않습니까?그것은 잘 작동합니다. 'pg_query_params'는 쿼리를 실행하는 더 좋은 방법입니다. –

1

"보안 된"문자열이 사용되는 위치에 따라 다릅니다. 그것이 데이터베이스에서 사용될 예정이라면, 단지 mysql_real_escape_string() 만 필요합니다. html로 표시하려면 htmlentities() 만 필요합니다. 간단히 말해서, 코드가 너무 많이 작동하고있어 해로울 수도 있습니다.

예를 들어 주석과 같이 html lateron에 표시하기 위해 데이터베이스에 저장하려면 문자열을 저장할 때 mysql_real_escape_string()을 사용하고 문자열을 표시 할 때는 htmlentities()을 사용해야합니다.

2

mysql_real_escape_string이 마지막 단계이므로 응용 프로그램 논리를 사용하면 안됩니다. 문자열을 데이터베이스에 전달하는 것이 유일한 목적이므로 쿼리를 생성 할 때만 사용하십시오. mysql_real_escape_string에 아무 것도 전달할 수 없으며 안전하게 데이터베이스에 저장할 수 있습니다.

나머지는 원하는대로 무엇입니까? 태그를 제거하려면 strip_tags 등을 사용하십시오.

+0

문자열이 xml 파일로 출력되고 플래시 응용 프로그램에서 해당 문자열을 읽습니다. Thanks – Drew

+0

XML 파일에 추가하는 경우 XML 파일에 추가 할 때 XML *에 대해 이스케이프 처리해야합니다. 여기서 문자열을 데이터베이스에 추가하여 데이터베이스에서 이스케이프 처리합니다. 다른 용도로 다른 유효성 검사/이스케이프 기능을 사용해야합니다. –

+0

감사합니다. 내가 추출 할 때 나는 정신을 걱정하지 않아! :) – Drew

1

서버가 PHP 5.2 이상을 사용하는 경우 XML 부분에 filter_var을 사용해야합니다.

$output = filter_var($input, FILTER_SANITIZE_STRING); 

는 데이터베이스에 뭔가를 저장 PDO 및 매개 변수가있는 쿼리를 사용합니다.

관련 문제