2014-10-24 1 views
0

URL 변수를 안전하게 전달합니까? 그렇습니다. 사람들이보고 찾아 볼 수있는 평범한 사이트에 있다는 것을 알고 있습니다 .... SSN이나 다른 것이 아닙니다. HTTPS 항목을 말하는 것이 아니라 제목과 이메일 주소를 전달하는 것입니다 ....URL 변수가 안전합니까?

예를 들어, 사이트의 About Us 페이지에는 직원 목록이 있습니다. "지미"를 예로 들어 봅시다. 지미에게는 생체와 사진이 있고, 생체에는 [접촉 짐] 버튼이 있습니다. 누군가가 [연락처 지미]를 클릭하면,는 다음을

<?php 
// Checks to see if $emailto is empty, if so, it will send to this default email address 
if (empty($_GET['emailto'])) { 
    $_GET['emailto'] = '[email protected]'; 
} 
?> 

<?php 
// Checks to see if $title is empty, if so, will default the the selected title "US" 
if (empty($_GET['title'])) { 
    $_GET['title'] = 'Us'; 
} 
?> 

제출시 : 변수가 전달되는 경우, 기본값을 설정하지 않을 경우

<a href="contact.php?title=Jimmy&[email protected]"> 

contact.php에서, 나는, 확인 contact.php 양식은 제출하기 전에 코드를 제거하고 유효성을 확인합니다. 나는 해커와 스팸봇의 오늘날과 시대의 URL에서 벌거 벗고있는 느낌이 들었다. 변수를 전달하는 것이 끔찍하고 말할 수없는 방법이라면 같은 것을 성취하는 방법에 대한 생각은 무엇입니까? 나는 사람들이 접촉 할 사람을 선택하는 연락 양식에 드롭 다운을하지는 않겠지 만, 그것이 옵션이라고 생각합니다. 좋아 .... 친절 해! ;)

+0

@jeroen 다른 구현물보다 스팸 메일에 대한 선택의 여지가 없습니다. CSRF를 모든 링크와 양식에 구현하지 않는 한; 실행 불가능하고 거의 발생하지 않는 경우 모든 요청이 스팸의 원인이 될 수 있습니다. – Bowersbros

+0

@Bowersbros 당신 말이 맞아요, 내 의견이 너무 광범위하고 질문에 구체적이지 않습니다 ... – jeroen

답변

0

명백한 변수가없는이 동일한 작업을 수행하는 또 다른 방법은 HTML5에서 data- 속성을 사용하고 jQuery.post와 jQuery를 함께 사용하는 것입니다. 무슨 일을하고하는 것은 위험 간주되지 않습니다,하지만 귀하의 질문에 대답하기 위해

$('.contact-user').on('click', function(e){ 
    var userEmail = $(this).data('user-email'); 

    $.post('handle_contact.php', { 
     userEmail: userEmail 
    }, function(data) { 
     // Do something with data 
    }, 'json'); // JSON return for example 
}); 

,하지만 당신이하지 않으면이 문제가 발생할 수 :

<a href="#" class="contact-user" data-user-email="[email protected]">Contact Jimmy!</a> 

그리고 일부 jQuery를 던져 변수를 적절하게 처리합니다. 침입자는 위험한 코드를 쉽게 통과시킬 수 있으며 올바르게 위조하지 않으면 매우 위험 할 수 있습니다. 그러나 이것은 귀하의 경우에 고유하지 않습니다.

1

get 대신 Javascript를 사용하여 게시물을 통해 제출하십시오. 이런 종류의 데이터를 보내는 것보다 훨씬 좋은 방법입니다.

function contact(title, to) 
{ 
    var formdata = new FormData(); 
    formdata.append('emailto', to + '@mysite.com'); 
    formdata.append('title', title); 
    var ajax = new XMLHttpRequest(); 
    ajax.open('post', 'contact.php', false); 
    ajax.send(formdata); 
} 
관련 문제