2013-02-27 12 views
1

JRequest :: getVar() 함수가 SQL 주입 또는 XSS를 방지 할만큼 충분한 지 또는 Joomla 사이트에서 XSS 또는 SQL 주입을 방지하기 위해 다른 것들을 사용하는 것이 더 낫지 만 알고 싶습니다.JRequest :: getVar ('Variable')는 joomla에 안전합니까?

+0

데이터베이스와 관련이없는 메서드가 마법 주입 방식으로 SQL 삽입을 방지한다고 생각하는 이유는 무엇입니까? – cHao

+0

Jrequest :: getVar()는 $ _REQUEST, $ _POST 및 $ _GET처럼 작동합니다. 공식 joomla 웹 사이트에서, 그들은 그것을 사용하여 JREquest :: getVar() 게시물을 사용하는 대신 좋은 및 나쁜 문자를 필터링하는 것처럼 얻을 좋은 있어야합니다 그들의 wriiten 있습니다. –

+0

어. 필터링 (특히 요청 수준에서)은 일반적으로 잘못된 방법입니다. Joomla가'''을 필터링 할 경우 더 이상 "Eat at Joe 's"가 포함 된 텍스트 필드를 가질 수없고 "O'Malley"의 성을 가진 사람은 해당 이름이 유효하지 않다고 전제됩니다. : P 당신이 원하는 도메인을 탈출 할 도메인에 대해. – cHao

답변

7

당신이 Joomla 2.5+ 용으로 개발한다고 가정하면 더 이상 JRequest을 사용하지 않아도됩니다.

요청 변수를 얻기의

새로운 방법이 같다 :

$jinput = JFactory::getApplication()->input; 
// expecting integer, default 0 
$user_id = $jinput->post->get('user_id', 0, 'INT'); 
// expecting string, default empty string 
$user_name = $jinput->post->get('user_name', '', 'STRING') 
당신이 알고있는 경우, 예를 들어 원하는 있도록 $jinput에 대한

세 번째 매개 변수, 필터입니다 돌려 주어지는 정수. 적절한 필터를 설정한다.

JInput을 사용하려면 magic quotes을 해제해야합니다.

는, SQL 주입으로부터 보호

$db = JFactory::getDbo(); 
// $value is not safe 
$value = $db->quote($value); 

를 사용하여 귀하의 의견을 읽은 후 XSS

$filter = JFilterInput::getInstance(); 
// $value is not safe 
$value = $filter->clean($value); 

에 대해하려면 그냥 그 자체에는 "나쁜 자"가 없다는 것을 추가 할. 또한 SQL injection 또는 xss에 대한 필터링은 매우 다릅니다. 필터링 및 이스케이프에 대한 이해를 돕기 위해 The Great Escapism

+2

그러나 Joomla 코어 2.5는 JRequest를 사용합니다. JInput은 마법 따옴표가 계속 켜져있는 사이트에서 실패하기 때문입니다. (PHP 5.3에서 더 이상 사용되지 않지만 5.4에서 제거되었습니다. 그러나 여전히 많은 사이트에서이 기능을 사용할 수 있습니다!) –

+0

의견을 보내 주셔서 감사합니다. –

+0

위의 멋진 답변을 추가하기 만하면 필터링 할 수있는 유형은 int, integer, uint, float, double, bool, boolean, word, alnum, cmd, base64, string, html, safe_html, array, path, raw를 포함합니다. , 및 사용자 이름. http://docs.joomla.org/Retrieving_request_data_using_JInput에서 필터 유형에 대한 추가 정보 http://lea51.stackexchange.com/proposals/58842/joomla에서 Joomla StackExchange 네트워크 지원을 고려해보십시오. – TryHarder