2012-03-20 3 views
1

현재 사람들이 이름, 웹 사이트 및 메시지를 양식에 넣을 수있는 PHP 방명록 PHP 스크립트를 작성하고 있지만 다른 사람이 javascript를 사용하지 못하도록하고 싶습니다. // XSS의 위험을 줄이는 데 URL 상자에, 나는 이것을 해결하기 위해 시도했다 :javascript : //를 url 매개 변수로 차단하는 방법

<?php filter_var($_POST['website'], FILTER_VALIDATE_URL) ?> 

하지만 난 여전히 퍼팅 자바 스크립트의 수 있어요 : // 나는이 문제를 방지 할 수 방법 드 URL 상자에 ? preg_replace이다

$website = preg_replace("/(javascript:\/\/)/i", "http://", mysql_real_escape_string($_POST['website'])); 

이나와 str_ireplace

$website = str_ireplace("javascript:", "http:", mysql_real_escape_string($_POST['website'])); 
+1

유효한 URL이기 때문에. url을 구문 분석하고 어떤 프로토콜이 사용되고 있는지 확인해야합니다. –

답변

-1

는 PHP의 parse_url 기능을 사용하는 것과 사용되는 프로토콜은 HTTP 또는 허용 목록에 있는지 확인 프로토콜은 http : // 및 skype : // 예를 들어 허용하는 경우 ...

$url = 'http://username:[email protected]/path?arg=value#anchor'; 
$tmp = parse_url($url); 

if ($tmp['scheme'] === 'http') { 
    echo 'is http://'; 
} 

if (in_array($tmp['scheme'], array('http', 'skype', 'call')) { 
    echo 'is allowed protocol'; 
} 
+1

$ Website가 에 삽입되면 자바 스크립트의 문자를 html로 인코딩하면 대체가 우회됩니다. java s cript : alert (1) – Erlend

2
$chk = parse_url($url); 

switch ($chk['scheme']) { 
case 'http': 
case 'https': 
    break; 
default: 
    // throw error here 
    break; 
} 
3

깨끗한 솔루션

+0

감사합니다. parse_url()을 사용하지 않았습니다. –

관련 문제