2012-06-30 5 views
-1

텍스트 영역에서 입력을 받아 양식이 비어있는 경우 (strlen = 0), 텍스트에 텍스트가있는 경우 다른 방법으로 처리합니다. 아무리 많은PHP strlen (str) 작동하지 않습니다.

function safeString($str) { 
    htmlentities($str); 
    htmlspecialchars($str); 
} 

내가 양식을 제출 때마다 :

<form name='contact' action='contact.php' method='post'> 
    ... 
    Message*<br /> 
    <textarea name='msg' rows='10' cols='70' maxlength='2048'><?php echo $msg ?></textarea><br /> 
    ... 
    <input type='submit' value='Send!' id='subby' name='fatk' style='height:60px; width:300px;' /> 
</form> 

이제 PHP 코드 : 여기

$msg = isset($_POST['msg'])?safeString($_POST['msg']):''; 
$msg = substr($msg,0,2048); 
if (strlen($msg) == 0) 
    echo "<h1>Test failed</h1>"; 
else { ... } 

safestring(str) 방법이다 다음은 폼의 일부가 아닙니다 또는 msg textarea에 넣는 방법이 거의 없으면 항상 비어 있다고 (TEST FAILED를 반향하여) 말합니다. 또한 내 양식을보다 안전하게 만들기 위해 내 safestring() 함수에 추가해야하는 항목이 있습니까?

답변

4

에서 safeString으로 반환하지 않습니다.

그 외에도 safeString은 중복되어 있습니다 (htmlentitieshtmlspecialchars의 상위 집합이며 후자는 XSS로부터 보호합니다).

마지막으로 이 아니며은 출력을 생산할 때만 입력을 허용 할 때이 위생 처리를 수행하지 않아야합니다.

이 toghether 넣어 코드는

$msg = isset($_POST['msg']) ? $_POST['msg'] :''; 
if ($msg == '') 
    echo "<h1>Test failed</h1>"; 
else { 
    echo "Received value: ".htmlspecialchars($msg); 
} 

또한 확실히이 (htmlspecialchars의 세 번째 매개 변수 참조) 입력의 인코딩을 지정해야 더 같이해야한다.

+0

이것은 댓글이 아니라 대답입니다. –

+0

그래서'htmlspecialchars' 만 사용해야합니까? –

+1

@ tereško : 답변을 확장 할 수있는 순간을 주시겠습니까? – Jon