2013-04-19 2 views
5

저는 node.js 앱을 작성 중이며 서버에 보낼 게시물 데이터를 작성하는 방법에 대해 조금 걱정이됩니다. 해당 링크를 클릭하면href - bad practice에서 POST 요청에 대한 데이터 저장 중?

<a class='delete' href="1231">Delete this data</a> 
<!-- href is based on a variable I'm pulling from the server --> 

, 나는 기본 동작을 방지하고 아약스 요청을 실행합니다 :

을 나는 데이터 항목을 삭제하려는 경우 예를 들어, 나는 href 속성에서 말했다 항목의 ID를 넣어
//On click + ajax 
body.on('click', '.delete', function(e){ 
e.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: '/admin/report/detail/delete', 
    data: {id: $(this).attr('href')}, 
    success: function(){ 
     //Success message 
    }, 
    error: function(){ 
     //Error message 
    } 
}); 
}); 

이런 식으로 href 속성을 사용하는 것이 바람직하지 않습니까? 그렇다면이 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

답변

9

대신 데이터 속성을 사용하십시오. 그들을 href에 저장하는 것은 의미 론적이지 않습니다. 때때로 ID를 저장하고 다른 데이터를 다른 시점에 저장하려면 어떻게해야합니까? 원하는만큼 많은 데이터 속성을 생성하여 의미 론적 이름을 부여 할 수 있습니다.

<a class="delete" data-id="1231" href="#"> 

그런 다음 자바 스크립트 :

... 
data: { id: $(this).data('id') } 
... 

또는

data: { id: $(this).attr('data-id') } 
+0

고마워, 그게 내가 정확히 생각한거야. 내 href 그냥 간단한 '#'해야합니까? –

+0

예, 해시는 아약스 앵커의 가장 일반적인 href입니다. 나는 항상'# '을 사용한다. 당신은 또한'javascript :;'를 사용할 수 있습니다,하지만 당신의 html을 오염시키고 불필요합니다. –

2

, 당신은 항상에 삭제할 레코드의 ID를 전송해야 할거야 정직하게하려면 그러나 당신은 그것을한다. 비록 당신이 데이터 속성을 수행한다고 할지라도 그것이 문제는 아닙니다. 사람들이 ID를 볼 수 있도록 AJAX를 통해 "유선을 통해"데이터를 전송하는 것입니다.

당신은 생각해야 - 그래,이 ID를 변경할 수 있습니다, 당신이 그것으로있다 그러나 영리한 사람들은 항상 확인 ... 다른 고객 ID를 삭제 가능성을 변경하는 방법을 찾을 ... 너무합니다 관련 보안 검사를 수행하십시오 서버 쪽 즉, 현재 로그온 한 사용자가 보내지는 사용자 ID를 삭제할 수 있습니까?

+0

+1, 내 대답은 모두 의미론에 관한 것이지만 보안과 관련하여 질문이있는 경우이 대답은 계속됩니다. –

+0

및 +1을 사용하면 내가 아는 것보다 더 많이 이해할 수 있습니다. 보안 컨텍스트에서 사용했습니다. –

+1

그래, 서버 측에서 인증을 받았습니다. 사실, 나는이 모든 삭제 요청을 GET에서 POST로 변환하고있다. (처음 코드를 작성할 때 내가 생각한 것을 묻지 않는다.) –

관련 문제