보안

2011-08-04 7 views
4

안녕하세요,보안

내가 CodeIgniter의에서 안전에 대한 몇 가지 의문에 봉착는 처음이다 : news.php, 그 안에 내가하는 방법이 있습니다

나는 컨트롤러가

class News extends CI_Controller{ 

    public function view($id) 
    { 
     $this->load->model('news_model'); 
     $this->news_model->get_by_id($id); 
     // ... 
    } 
} 

작업이 형태의 안전 :

예보기라고? URL에 의한 SQL 삽입의 위험이 있습니까? 이 페이지가 mywebpage/news/number_id에 액세스 할 수 있음을 고려하십시오. intval() 또는 불필요한 것을 필터링하는 것이 흥미로울 것입니까?

내 두 번째 질문은 :

기본 된답니다 XSS 필터에 의해

게시하고 얻을 수 있지만, 방법 알 수없는 CodeIgniter의에서 HTML을 필터링 할 수 있습니다, 나는 아래로 CodeIgniter의에서 도우미를 만들어, 네이티브와 유사한 몇 가지 방법이있다 CodeIgniter?

function remove_xss_html($string){ 

    if(is_array($string)){ 

    $return_array = array(); 

     foreach($string as $item) 
     { 
      if(!get_magic_quotes_gpc()) 
      { 
       $return_array[] = addslashes(htmlspecialchars(strip_tags($item))); 
      } 
      else 
      { 
       $return_array[] = htmlspecialchars(strip_tags($item)); 
      } 
     } 
      return $return_array; 
    } 
    else 
    { 
     return htmlspecialchars(strip_tags($string)); 
    } 
} 

와 세 번째와 마지막 질문은 다음과 같습니다

내가 변수 $를 보낼 경우 this-> 입력 -> 포스트 ('my_var')에 직접 필터를 사용하지 않고 데이터베이스에, 나는 위험을 실행 SQL 주입? CodeIgniter 또는 필터가 매우 안전합니까?

IMPORTANTE : 영어 실력이 좋지 않아서 Google에서 번역 및 수정을 할 수있었습니다. 당신은 DB의 상호 작용에 대한 Active Record 클래스를 사용하는 경우

답변

6

... 여러분 모두 감사 데이터를 자동으로 이스케이프됩니다 단순함을 넘어

, 활성 기록 기능을 사용하는 주요 혜택 쿼리 구문은 각 데이터베이스 어댑터에서 생성되므로 데이터베이스 독립적 응용 프로그램을 만들 수 있습니다. 또한 값이 시스템에 의해 자동으로 이스케이프되므로 더 안전한 쿼리가 가능합니다.

아니요 수동으로 쿼리를 실행하는 경우 직접 이스케이프 처리해야합니다.

당신의 기능에 대한 몇 가지 조언 : URL에 존재하지

public function view($id) 
{ 
    $this->load->model('news_model'); 
    $this->news_model->get_by_id($id); 
    // ... 
} 

$id 경우, 오류 통지를 받게됩니다. 기본값을 설정하십시오 :

public function view($id = NULL) 

그런 다음 컨트롤러의 값을 확인하십시오. 예 : 또한

if (! $id) 
{ 
    redirect('somwhere/else'); 
} 

, 계속하기 전에 결과를 얻을 수 있는지 확인합니다 (난 더 레코드가 발견되지 않으면 모델이 여기 false을 반환 가정) :

$record = $this->news_model->get_by_id($id); 
if (! $record) // redirect with error message or something 

당신은 $id의 유형 또는 무결성을 검증 할 수 있습니다 당신이 원하는만큼,하지만 단순하게 모델을 넘겨주고 레코드가 발견되지 않으면 false을 반환합니다.

+0

설명 주셔서 감사합니다.하지만 활성 레코드를 사용하고 예, 저는 항상 함수의 매개 변수에 대한 기본값을 결정합니다. Function test ($ id = false) {}, if ($ id) {} – user875690

0

활성 레코드를 실행하지 않아도 자동 이스케이프가 제공됩니다.