HTML 양식의 입력을 위생해야 할 필요성을 알고 있지만, 최근 모듈에서 파일 업로드 필드를 삭제할 때 파일 업로드가 실패하기 시작했습니다. 모든 양식 입력을 위생 처리하는 것이 중요합니다. 특별한 파일 업로드 필드조차도?Perl CGI HTML 양식의 파일 업로드 입력 필드를 위생 처리해야합니까?
내 폼 출력 코드는 다음과 같이 보입니다 :
use CGI;
my $cgi = new CGI;
print $cgi->header();
# ... print some HTML here
print $cgi->start_form();
print $cgi->filefield(-name=>'uploaded_file',
-size=>50,
-maxlength=>80);
print $cgi->submit(-name=>'continue',
-value=>'Continue');
print $cgi->end_form();
# ... print some more HTML here
을 그리고 내 위생 코드는 다음과 같이 (는 위와 같은 모듈에 실제로 이전의)를 찾습니다 :
use HTML::Entities
my $OK_CHARS => 'a-zA-Z0-9 .,-_';
foreach my $param_name ($cgi->param()) {
my $original_content = $cgi->param($param_name);
my $replaced_content = HTML::Entities::decode($original_content);
$replaced_content =~ s/[^$OK_CHARS]//go;
$cgi->param($param_name, $replaced_content);
}
I 추가 최근 sanitization 코드가 파일 업로드를 시작하지 못했습니다. 파일 핸들은 다음 줄에서 정의되지 않은 파일을 반환합니다.
my $uploadedFilehandle = $cgi->upload('uploaded_file');
그래서 위생 처리 코드에 문제가 있습니까? 인터넷에서 코드 스 니펫을 얻었으므로 완전히 이해하지 못합니다. 전에 'o'정규식 수정자를 본 적이 없으며 HTML :: Entities 모듈을 사용하지도 않았습니다.
param ('uploaded_file')이 파일 핸들을 반환했다는 것을 실제로 깨닫지는 못했습니다. 업로드 ('uploaded_file')가 파일 핸들을 반환했다는 것을 알고있었습니다. 내가 발견 한 모든 위생 처리 자습서는이 작은 문제를 언급하지 못했습니다. –
@ Kurt : 항상 파일 핸들이있는 것은 아닙니다. CGI.pm : 양식을 처리 할 때 param()을 호출하여 입력 된 파일 이름을 검색 할 수 있습니다. $ filename = $ query-> param ('uploaded_file'); 다른 브라우저는 이름이 인 경우 약간 다른 결과를 반환합니다. 일부 브라우저는 파일 이름 만 반환합니다. 기타 파일의 전체 경로를 반환합니다 ... 파일 이름은 파일 핸들이기도합니다. upload() 메소드를 사용하는 것이 더 쉽지만 동의하지만 문자열을 처리 할 수 있어야합니다. – jimtut
설명 주셔서 감사합니다. 이미 코드의 다른 부분에서 업로드 된 파일이 내가 예상 한 올바른 유형인지 확인하고 있으므로 위생 루틴에서 업로드 필드의 삭제를 건너 뛸 것입니다. –