2011-12-08 3 views
0

저는 ajax, php 및 mysql을 사용하여 crm을 작성하고 있습니다. 나는 아약스 xhr 요청을 사용하여 GET 및 POST 요청으로 솔루션을 구축 중이다. 제 질문은 이러한 요청이 모든 유형의 해킹이나 공격으로부터 안전하다는 것을 확인하는 가장 좋은 방법은 무엇입니까? 내 고객 데이터와이 CRM이 안전한지 확인하고 싶습니다.Ajax POST/GET 보안

지금은 오랫동안 ajax/javascript를 사용하고 있습니다. 나는 많은 jQuery를 사용하지 않는 :

내 PHP 파일이

$contact=$_POST['contact']; 

$sql="SELECT * 
     FROM contacts 
     WHERE contacts.contact_id = $contact"; 

과 같은

function getContacts() 
{ 

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("div").innerHTML=xmlhttp.responseText; 
     } 
    } 
xmlhttp.open("POST","xhr_php/getContacts.php",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
var contact = document.getElementById('contact_id').value; 
xmlhttp.send("contact="+contact); 
} 

그래서이 난 단지 데이터를 검색하지만에 사용한 기본적인 방법은 다음과 같습니다 내 요청이 같이 보입니다 또한 레코드를 삽입하고 다른 모든 쿼리를 실행합니다. 내 질문은 모든 데이터가 안전하도록 이러한 요청 및 SQL 쿼리를 보호하는 가장 좋은 방법은 무엇입니까. 데이터가 손상되거나 도난 당하거나 주입되거나 해킹 당할 수 없도록 보안 crm 솔루션인지 확인하고 싶습니다. 도움을 주셔서 감사합니다.

+0

또한 Jim의 대답에 작은 추가 (100 % 정확함), jquery 라이브러리를 살펴 보도록하겠습니다. 간단한 Ajax 요청 (및 기타 멋진 내용도 포함)은 매우 간단하고 신속합니다. –

답변

4

이것은 안전하지 않습니다. Ajax, POST 또는 GET과는 아무런 관련이없는 SQL 주입 공격에 취약합니다. 그런 식으로 SQL 문을 작성하면 안됩니다. 귀하의 질문은 스택 오버플로에 적합하지 않습니다 - "내 코드를 안전하게 만드는 방법"은 간단한 방법으로 대답 할 수없는 광대 한 주제입니다. 이 기능을 전문적으로 구축하는 경우 더 많은 수석 개발자에게 도움을 요청하십시오. 기본 SQL 주입 실수를 저지른 경우 전체 CRM 패키지를 직접 구현할 수는 없습니다 보안을 유지하면서

+0

을 사용하십시오. 저는 이것이 안전하지 않다는 것을 충분히 알고 있습니다. 분명히 그것이 제가 게시하는 이유입니다. 나는 그것이 안전하다고 생각한다면 나는 그 질문을 게시하지 않을 것이다. 어쨌든, 나는 변수에 mysql_real_escape_string을 추가 할 수 있다는 것을 알고있다. 이게 충분한 보안일까요? 그렇지 않다면 초보자로서 지식 부족을 비난하는 대신 건설적인 것을 게시 할 수 있습니다. 고맙습니다. – user982853

-3

이 SQL 주입에 면역해야한다 :

$contact=intval($_POST['contact']); 

$sql="SELECT * 
    FROM contacts 
    WHERE contacts.contact_id = $contact"; 

mysql_query($sql); 
+0

@Rook 내 게스트로 편집하거나 추가하려는 경우. – Chase

+0

고정, 또한 내 downvote 남아 있기 때문에 여전히 완전히 단서. – rook

+0

게시자가 게시 한 헛소리가 효과적이라면 SQL 주입이 존재하는 이유를 생각해보십시오. 모든 쿼리를 방지하기 위해 모든 쿼리를 실행할 수 있습니다. 카운터 인수는 매개 변수화 된 쿼리가 되겠지만. – rook

0

당신은 PDO를 사용해야합니다. 다음은 예제 코드입니다. 필요에 따라 수정할 수 있습니다.

$host = 'localhost'; 
$dbname = 'contacts'; 
$username = 'anyuser'; 
$password = 'your password'; 

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

//If contact is int value then pass it through intval function 
$contact=intval($_POST['contact']); 

$sql = 'SELECT * FROM contacts WHERE contacts.contact_id = :contact_id'; 
$statement = $conn->prepare($sql); 
$statement->bindParam(':contact_id', $contact, PDO::PARAM_INT); 
$statement->execute(); 
//Use $result is your page 
$result = $statement->fetch(PDO::FETCH_ASSOC); 

당신은뿐만 아니라 PDO와이 도움이

$stmt = $conn->prepare("INSERT INTO Table (name, value) VALUES (:name, :value)"); 
$stmt->bindParam(':name', $name); 
$stmt->bindParam(':value', $value); 
$stmt->execute(); 

희망을 삽입/업데이트 할 수 있습니다.