2012-06-04 4 views
2

Help! 나는 아래의 코드와 유사하여 MySQL 데이터베이스를 업데이트하는 몇 가지 코드를 쓰고 있어요 : -JQuery를 사용하여 데이터베이스 업데이트 ajax.Post()

$.post('http://myURL.com/vote.php?personID=' + personID + '&eventID=123'); 

vote.php 코드는 쿼리 문자열 값을 사용하고 거기에 그 값을 데이터베이스에 레코드를 삽입합니다. 자신의 주소 표시 줄에

http://myURL.com/vote.php?personID=5&eventID=123

본질적으로 응용 프로그램을 스팸 :

코드의이 종류는 잘 작동하지만, 나는이 문제를 실현 한 것은 사람들은 뭔가를 입력 할 수 있다는 것입니다 ...

내가 이런 일이 발생하지 않도록하는 간단한 방법이 있습니까? 나는 합리적으로이 기술에 익숙하지 않기 때문에 모든 것이 어떻게 작동하는지 알지 못하지만 빨리 배우기 때문에 어떤 포인터라도 유용 할 것입니다.

은 $ .post의
+0

내가 최고는 항상 데이터를 암호화 할 수 있으며, 당신이 그것을받을 때 해독해야한다고 생각한다. – jcho360

답변

3

처럼 site.Use를 손상시킬 수 없을 것이다이 방법을 사용

$.post(url,data_to_send,callback_function)

입니다 데이터베이스로가는 데이터에 GET 매개 변수를 사용합니다. 일반적으로 URL에 표시되지 않는 POST 매개 변수를 사용하려고합니다. 그래서 대신 :

$.post('http://myURL.com/vote.php?personID=' + personID + '&eventID=123'); 

당신은 이런 식으로 할 것 :

$personID = $_POST['personID']; 
$eventID = $_POST['eventID']; 

:

$.post('http://myURL.com/vote.php', { "personID" : personID, "eventID" : 123 }); 

그리고 당신의 PHP 스크립트

, 당신은이 같은 $_POST 배열 데이터에 액세스 할 그러나 SQL Injection과 같은 나쁜 것들을 방지하기 위해 데이터베이스에 저장하기 전에 입력을 적절하게 필터링하는 것을 잊지 마십시오.

이것은 과장된 내용이 아닙니다. HTTP 클라이언트가 사이트에 게시물 요청을 보낼 수 있기 때문에 여전히 스팸이 가능합니다. 당신이 볼 수있는 또 다른 일은 스팸에 대한 취약성을 줄이기 위해 Security Tokens입니다. 또는 요청/분/사용자 수를 제한하는 시스템을 구현하십시오 ...하지만 원래 질문에서 너무 멀어지고 있습니다.

+0

Perfect answer. A + –

0

올바른 구문은 사용자가 그것은 좋은 생각이 아니다

$.post('http://myURL.com/vote.php',{"personID":personID,"eventID":123); 
+0

위대한 작품과 훨씬 더 감사합니다. 그러나 내가 가진 주요 문제는 누군가가 쿼리 문자열을 작성하지 않고 주소 표시 줄에 입력하는 방법을 찾는 것입니다. –

+0

게시물을 얻는 것이 더 좋은 선택이 될까요? 내가이 물건을 집어 들고 있다고 말한 것처럼 내 질문이 어리석은 것처럼 보일 경우 사과드립니다. –

+0

대답의 왼쪽에있는 체크 표시를 잊지 마세요. –

0

POST를 사용하든 GET을 사용하든 항상 hash_hmac을 사용하여 페이지의 중요한 필드에 서명 할 수 있습니다. 이렇게하면 다른 사람이 추측 할 수없는 서명을 추가하여 사람들이 가치를 감지하지 못하게 변경할 수 없습니다.

이것은 또한 고정 기술로 인해 CSRF를 더 어렵게 만들지 만 불가능하지는 않습니다. 그것은 "피들러"가 더 어려워 질 수있는 또 다른 기술입니다.

다음 함수는 주어진 사람 ID에 소금과 서명을 추가하여 보안 된 문자열을 구성합니다.

define('MY_SECRET', 'an unguessable piece of random text'); 

function getSecurePersonId($personId) 
{ 
    $rnd = uniqid("$personId-", true); 
    $sig = hash_hmac('sha1', $rnd, MY_SECRET); 

    return "$rnd-$sig"; 
} 
당신은 $.post() 또는 $.get()의 데이터로 전달할 자바 스크립트 getSecuredPersonId()의 출력을 전달할 것

; 게시 btw 것이 좋습니다.

양식이 제출되면 요청자의 ID는 신청 방법에 따라 $_GET['personID'] 또는 $_POST['personID']이됩니다. 지정된 값을 확인하려면, 당신은이 기능을 통해 그것을 실행 값이 올바르게 서명

function validateSecurePersonId($securePersonId) 
{ 
    if (3 != count($parts = explode('-', $securePersonId))) { 
     return false; 
    } 
    // reconstruct the signed part 
    $rnd = "{$parts[0]}-{$parts[1]}"; 
    // calculate signature 
    $sig = hash_hmac('sha1', $rnd, MY_SECRET); 

    // and verify against given signature 
    return $sig === $parts[2] ? $parts[0] : false; 
} 

경우, 그것은 당신이 시작 원래 사람의 ID를 반환합니다. 실패 할 경우 false을 반환합니다.

작은 시험 :

$securePersonId = getSecurePersonId(123); 
var_dump($securePersonId); 

if (false === validateSecurePersonId($securePersonId)) { 
    // someone messed with the data 
} else { 
    // all okay 
} 
+0

이 코드를 사용하는 방법과 문제를 해결하는 방법에 대한 자세한 정보를 제공하십시오. 지금은 절대적으로 가치가 없습니다. –

관련 문제