2009-11-19 3 views
0

$_SESSION['text']이 실제로 텍스트인지 일부 악의적 인 .exe가 아닌지 확인하는 방법은 무엇입니까?

, 내가 destroy_session (...)를 할 수 있지만 설정하면

$a = $_SESSION; 

않는 지금 $ A가 NULL을?

+0

확실한 방법은 없습니다. 당신이 할 수있는 최선의 일은 그것을 실행하지 않는 것입니다. (파일에 쓰지 마십시오.) –

답변

1

세션 데이터는 서버 측 (보통 tmp 디렉토리에있는 파일)에 저장되므로 세션 변수를 설정할 수 있습니다. 그러나이 데이터는 serialize과 비슷한 형식으로 일련 번호가 지정됩니다. 따라서 실제 파일 내용은 실행될 적절한 형식이 아닐 수 있습니다. 따라서 실수로 해당 파일이 실행된다는 점에 대해 걱정할 필요가 없습니다.

2

왜 신경 씁니까? 그것을 실행할 계획입니까? 세션 필드가 실행될 수있는 이진 데이터를 포함하는 경우, 이는 이 실행된다는 것을 의미하지 않습니다.

심지어 텍스트 문자열에도 실행 코드가 포함될 수 있습니다. 당신이 그것을 어떻게 실행 하느냐에 달려 있습니다. "rm -rf *"를 포함 할 수 있습니다. "exec"로 실행하면 문제가 생길 수 있습니다. 필터링의 양은 문자열이 일부 언어에서 실행 가능하지 않음을 보장 할 수 없습니다. 그 때 걱정할 시간은 실제로 실행을하고 변수를 변수의 일부로 사용할 때입니다.

두 번째 질문으로, 세션을 삭제하기 전에 배열을 복사 한 경우 세션이 변경 되어도 복사본이 변경되지 않습니다. 모든 PHP 배열에서 마찬가지입니다.

+0

그래, 제 두 번째 질문에도 대답 해 주시겠습니까? – Gal

0

is_string을 사용하여 유효한 문자열인지 여부를 알 수 있고 preg_match ($ _SESSION [ 'text'], [a-z] + ')와 같은 regexp를 사용할 수 있지만 JW에서 말하는 내용을 확인합니다.

0

두 번째 질문에 대답하려면 아니오, 빈 배열이됩니다.

0

데이터베이스에 보내기 전에 길이를 예상 한 길이로 제한하고 addslashes()으로 위생 처리하십시오.

오라 (Ora)는 시스템 호출로 보낼 계획입니까? 하지마.