2012-06-06 2 views
2

나는 이것에 대해 너무 많이 생각하고 있지만 데이터베이스에 웹 사이트 필드가 있다고 가정 해 봅시다. strip_tags를 사용하여 모든 HTML 태그를 제거했습니다. 사용자가이URL에 대한 Codeigniter 필터 출력 사용

자바 스크립트 입력한다면 : 경고 ('테스트')는 문자열이기 때문에

이 통과 얻을 것이다. 그런 다음 HTML이 생성됩니다.

<a href="<?php echo prep_url($website);?>">Website</a> //the code in view file 
<a href="javascript:alert('test')">Website</a> //bad 

클릭하면 자바 스크립트가 실행됩니다. prep_url이 작동하지 않음을주의하십시오.

의견이 있으십니까? HTMLPurifier를 살펴 봤지만 크기가 상당히 크고 중요한 변경 작업을 실제로하고 싶지 않습니다.

감사합니다.

답변

2

당신이 URL을 기대한다면 당신은 strip_tags를 사용하지 말아야합니다, 당신은 URL을 확인하고 아마 urlencode을해야한다.

$url = "javascript:alert('test')"; 
var_dump(filter_var($url, FILTER_VALIDATE_URL)); 
// bool(false) 

$url = "http://stackoverflow.com/questions/10918132"; 
var_dump(filter_var($url, FILTER_VALIDATE_URL)); 
// string(43) "http://stackoverflow.com/questions/10918132" 

그렇다면 filter_var($user_input, FILTER_VALIDATE_URL)FALSE 인 사용자 입력을 허용하지 않습니다, 다음은 filter_var 하나 개의 방법이있다. 이것은 CI의 xss_clean()에 대한 필요성을 부정해야합니다. HTML 속성에 넣으면 어쨌든 그것을 실행하고 싶을 수도 있습니다. 사용자가 http:// 부분을 입력하지 않아도되는지 확인하기 전에 입력에 prep_url을 실행해야 할 수도 있습니다.

URL을 확인하는 데는 여러 가지 방법이 있습니다. 원하는 URL을 선택하는 방법은 여러 가지가 있습니다.

+0

HTML 태그가 필요 없기 때문에 strip_tags를 사용하고 있으며 URL은 문자열이 될 것입니다. http://www.google.com은 strip_tags와 관련이 없습니다. filter_var에 대해서도 숙고했습니다. URL 유효성을 검사하는 도우미를 만들 것입니다. 하지만 더 나아 졌나요? 사용자가 원하는대로 입력 할 수있게하고 출력에 필요한만큼 필터/추출을 수행하거나 엄격하고 예상치 못한 입력을 저장하지 않습니까? – Henson

+0

그냥 불필요하며'http://example.com?q=

'은 strip_tags가 망가뜨릴 수있는 유효한 URL입니다. 'urlencode' 만 있으면됩니다. http://php.net/manual/en/function.urlencode.php 다른 질문까지 : "What 's better"는 당신이 원하는 일에 달려 있습니다. 사용자가 정말로 정크 URL을 입력하도록 하시겠습니까? 그런 다음 XSS 정리 함수를 사용하거나 HTMLPurifier를 다시 살펴 보겠습니다. 어쨌든, urlencode는' ">

1

Codeigniter에는 xss 필터 클래스가 있습니다. 세계에서 가장 좋은 것은 아니지만 가장 일반적인 문제를 걸러냅니다. Security class

구성 파일의 옵션을 변경하여 codeigniter를 모든 POST 및 GET 필터로 만들거나이 작업을 수동으로 필터링하도록 요청할 수 있습니다.

$this->input->post('whatever',TRUE); //Note the TRUE 
관련 문제