2015-01-18 2 views
0

Так что в основном мой вопрос прост. Представьте себе ситуацию, когда вы делаете регистрационную форму. С jquery.post я сделать вызов AjaxБезопасный AJAX POST/GET jQuery

$.post("pages/form_handle.php", name: $.(".username").val(), pass: $.(".pass").val() , function(data) { 
$(".result").html(data); 
}); 

это просто вызов (я верю, так) ...

Как сделать это безопасно? Итак, если пользователь посмотрит в моем исходном коде, он или она знают, куда я отправляю свои данные в примере страниц/form_handle.php также он или она знает, какие данные я отправляю на эту страницу. Одна из идей, что у меня есть простая отправка всех ajax-вызовов на одну страницу ajax.php добавление дополнительных переменных, которые вызовут правильную функцию php для вызова ajax ... Но верно ли это? Или, может быть, есть лучший способ сделать это безопасным?

+0

До тех пор, как ваш на HTTPS с SSL сертификатов будет в безопасности, как он получает , никто не может читать ваши данные, кроме вас, но что делает злоумышленник со своим собственным паролем ?, взломать себя? – Neat

+0

И с https? – Juris

+2

Сделать что-то безопасное на самом деле довольно сложно и требует знаний. Реальный вопрос: насколько он безопасен? Это банк, или вы храните личную информацию? Прежде всего, вам вообще не нужно беспокоиться о javascript, независимо от того, что пользователь может видеть в источнике или на экране, это данные, которые пользователь уже знает, просто убедитесь, что они не видны всем. На сервере вы, по крайней мере, никогда не храните пароли и не используете хеши и соли. Там написано миллионы страниц, и в Интернете полно ресурсов. – adeneo

ответ

0

Придерживайтесь основ и сохраняйте свои пароли.

AJAX не является серверным языком, его плагин javascript, который делает то же самое, что формы, действия и т. Д. Только в фоновом режиме в качестве нового запроса.

Ваш аякс не в опасности, но ваши файлы php, вы можете использовать jquery-validate.js для проверки ввода пользователей, но также вы должны сделать проверку правильности в своем ajax.php.

Вот простой запрос Ajax Логин:

function loginUser() { 
    var process = "loginUser"; 
    var data = $("form").serializeArray(); 
    data[1].value = data[1].value; // data to ajax.php page 
    data = JSON.stringify(data); 

    $("#loginButton").html('Login'); 
    $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: {"process": process, "data": data}, 
     success: function(data) { 
      if (data.response.state == "success") { 
       // if ajax.php returns success, redirect to homepage or whatever 
      } else { 
       // if ajax.php returns failure, display error 
      } 
     }, 
     error: function(jqXHR, textStatus, errorThrown, data) { 
      // error handling 
     }, 
     dataType: "json" 
    }); 
} 

И просто ajax.php Логин:

<?php // ajax.php 

    require_once 'login.php'; 

    $db_server = mysql_connect($db_hostname, $db_username, $db_password); 
    if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 
     mysql_select_db($db_database) 
    or die("Unable to select database: " . mysql_error()); 


    if (isset($_SERVER['PHP_AUTH_USER']) && 
     isset($_SERVER['PHP_AUTH_PW'])){ 
    $un_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_USER']); 
    $pw_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_PW']); 

     $query = "SELECT * FROM users WHERE username='$un_temp'"; 
     $result = mysql_query($query); 
     if (!$result) die("Database access failed: " . mysql_error()); 

     elseif (mysql_num_rows($result)){ 
      $row = mysql_fetch_row($result); 
      $salt1 = "qm&h*"; 
      $salt2 = "[email protected]"; 
      $token = md5("$salt1$pw_temp$salt2"); 

      if ($token == $row[3]) echo "$row[0] $row[1] : 
      Hi $row[0], you are now logged in as '$row[2]'"; 
       else die("Invalid username/password combination"); 
     } else die("Invalid username/password combination"); 
     }else{ 
      header('WWW-Authenticate: Basic realm="Restricted Section"'); 
      header('HTTP/1.0 401 Unauthorized'); 
      die ("Please enter your username and password"); 
     } 
     function mysql_entities_fix_string($string){ 
      return htmlentities(mysql_fix_string($string)); 
     } 
     function mysql_fix_string($string){ 
      if (get_magic_quotes_gpc()) $string = stripslashes($string); 
      return mysql_real_escape_string($string); 
     } 

?> 
Смежные вопросы