Ajax POST / GET security - PullRequest
       6

Ajax POST / GET security

0 голосов
/ 08 декабря 2011

Я создаю тип crm, используя ajax, php и mysql.Я строю решение с помощью запросов GET и POST, используя запросы ajax xhr.Мой вопрос заключается в том, как лучше всего убедиться, что эти запросы защищены от любого типа взлома или атаки.Я хочу убедиться, что данные моих клиентов и эта crm безопасны.

Сейчас я просто использую ajax / javascript с длинными руками.Я не использую много jquery: мой запрос выглядит примерно так:

 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);
 }  

мой php-файл выглядит так

$contact=$_POST['contact'];

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

Так что это основной метод, который я использовал, чтобы нетолько для получения данных, но также для вставки записей и выполнения всех других запросов.Мой вопрос заключается в том, каков наилучший способ защитить эти запросы и запросы SQL, чтобы все данные были в безопасности.Я хочу убедиться, что это безопасное решение crm, чтобы данные не могли быть повреждены, украдены, введены, взломаны и т. Д. Спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 08 декабря 2011

Это небезопасно;он уязвим для атаки SQL-инъекцией, которая не имеет ничего общего с Ajax, POST или GET.Вы не должны строить операторы SQL таким образом.Ваш вопрос не совсем подходит для переполнения стека - «Как сделать мой код безопасным» - это обширная тема, на которую невозможно ответить простым способом.Если вы строите это на профессиональном уровне, пожалуйста, обратитесь к более высокому разработчику, чтобы помочь вам с этим - если вы делаете основные ошибки SQL-инъекций, то очень маловероятно, что вы сможете создать целый пакет CRM самостоятельно.делая его безопасным.

0 голосов
/ 12 сентября 2013

Вы должны использовать 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();

Надеюсь, это поможет.

0 голосов
/ 08 декабря 2011

Это должно быть невосприимчиво к инъекции sql:

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

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

mysql_query($sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...