安全的AJAX POST / GET jquery

时间:2015-01-18 10:49:05

标签: javascript php jquery ajax security

基本上我的问题很简单。 想象一下当你登录或注册表格时的情况。使用jquery.post我进行ajax调用

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

这是一个简单的电话(我相信)......

如何确保安全? 因此,如果用户查看我的源代码,他或她知道我在示例 pages / form_handle.php 中发送数据的位置,他或她也知道我发送到此页面的数据。 其中一个想法是我简单地将所有ajax调用发送到一个页面 ajax.php 添加额外的变量谁将调用正确的php函数进行ajax调用... 但这是正确的方法吗?或者也许有一些更好的方法来保证它的安全性?

1 个答案:

答案 0 :(得分:0)

坚持基础知识,并保持密码保存。

AJAX不是服务器端语言,它是一个javascript插件,与表单,操作等完全相同......只是在后台作为新请求。

你的ajax没有危险,但你的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 = "pg!@";
            $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);
        }

?>