2015-01-22 3 views
-2

다음 코드는 SQL 및 PHP를 통해 원격 데이터베이스에 데이터를 전달할 때 위생 방법에 대한 제안입니다.MSQLI 실제 이스케이프 문자열 및 STRTR 연산자를 사용하는 PHP 위생

$name = strtr(mysqli_real_escape_string($connector_obj, $_POST['name']), '/\\', ' '); 

내 질문은 MSQLI 운영자가 다음 여전히 안전 코드를 만드는 strtr 운영자 APPEND를 입력을 소독 할 것이다, 또는 분야는 여전히 취약? 이 위생은 초기 쿼리 이후에 제공되므로 다른 옵션은 데이터베이스에 값을 전달한 다음 strtr 작업을 수행 한 후 고객이 직접 페이지에 정보를 출력합니다.

더 높은 수준의보기에서 사용자는 MSQLI 이스케이프 문자열의 슬래시를 어떻게 관찰합니까? 나는 그것이 덜 매력적으로 보이고 나쁜 평판을 가진 사람들을 위해 응용 프로그램의 구조에 대해 통찰력을 줄 것이라고 생각하지만, 아이디어에 대한 어떤 의견도 감사 할 것입니다.

답변

0

mysqli_real_escape_string은 문자를 이스케이프합니다. 그것은 위생적이지 않습니다.

값이 게시되면 해당 시간이 삭제됩니다.

정수 값을 사용하는 것이 좋습니다. 이메일 주소 대신 사용자 이름으로 전화 번호를 요청합니다. 그런 다음 정규식을 사용하여 숫자 값을 제외하고 모두 제거합니다.

$number = preg_replace('/[^\d]/','',$_POST['number']); 

난 그냥 사용 공백, 쉼표, 대시와 정수를 찾고 있어요 경우 :

$number = intval($_POST['number']); 

당신은 쿼리에서 사용하는 값을 규정해야한다.

$sql = sprintf("SELECT * FROM `Client` WHERE `Number` = %d", $id); 

나는 또한 제출 된 모든 것을 봅니다. SQL Injection 공격에서 일반적으로 사용되는 기호 및 단어를 확인합니다.

$strike1 = 1 + preg_match_all('/\x3F/',$SAVE_ID,$matches, PREG_SET_ORDER); //) 
    $strike2 = preg_match_all('/[\x21-\x2F]|[\x3A-\x40]|[\x5B-\x60]|[\x7B-\x7F]/',$SAVE_ID,$matches, PREG_SET_ORDER); 
    $strike3 = preg_match_all('/\x28/',$SAVE_ID,$matches, PREG_SET_ORDER); //) 
    $strike4 = preg_match_all('/\x29/',$SAVE_ID,$matches, PREG_SET_ORDER); // ( 
    $strike5 = preg_match_all('/COALESCE|0x|like|regex|mid|select|delete|drop|insert|do|call|replace|update|infile|lock|set|from|into|show|table|kill|reset/i',$SAVE_ID,$matches, PREG_SET_ORDER); 

내가 너무 많은 위반을 볼 때, 나는 IP 주소를 금지합니다.

@mysql_unbuffered_query("INSERT INTO `Banned` (`ip`, `TimeStamp`,`Strike3`, `Attributes`) VALUES ('$ip', CURRENT_TIMESTAMP, $alert);"); 

비밀번호 오류도 감시합니다. 짧은 시간 내에 실패한 시도가 너무 많거나 시도 간격이 너무 짧으면 (사람이 아닐 때) 나는 IP를 금지합니다.

+0

니스. 파업 시스템에서 사용한 기능에 대해 좀 더 자세히 설명해 줄 수 있습니까? –