首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery Ajax和Sanitization

jQuery Ajax和Sanitization
EN

Stack Overflow用户
提问于 2011-12-03 09:27:19
回答 1查看 1.7K关注 0票数 1

我有这个问题,我还没有找到解决办法。例如,我目前正在使用jQuery通过Ajax将数据发布到我编写的PHP脚本中。当我对Ajax请求发送的数据使用mysql_real_escape_string()时,用户名将被完全简化为零,密码将在MD5中重新散列。我的完整代码如下所示。我认为这是mysql_real_escape_string()的一个问题,因为如果从两个输入中删除函数,表单就会无缝工作。以前有没有人遇到过这个问题,或者知道有什么解决办法?谢谢!

编辑:同时,数据被传递给两个字段的脚本,我已经用echo print_r($_POST, true);确认了这一点

login.php:

代码语言:javascript
复制
<?php
function dbConnect() {
    $db = new mysqli("", "", "", "");
    return $db;
}
$username = mysql_real_escape_string($_POST["username"]);
$sanPass = mysql_real_escape_string($_POST["password"]);
$password = md5($sanPass);
$db = dbConnect();
$query = "SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password';";
$res = $db->query($query);
$num = mysqli_num_rows($res);
if ($num == 0) {
    echo "incorrect u=" . $username . " p=" . $password;
} else {
    $row = $res->fetch_assoc();
    $uuid = uniqid(rand(0, 10000));
    setcookie("jBootUsername", $username);
    setcookie("jBootUUID", $uuid);
    setcookie("jBootIP", $_SERVER["REMOTE_ADDR"]);
    $ip = $_SERVER["REMOTE_ADDR"];
    $query = "INSERT INTO `sessions` (username, cookie, ip) VALUES ('$username', '$uuid', '$ip');";
    $db->query($query);
    echo "success";
}
?>

login.js:

代码语言:javascript
复制
$(document).ready(function() {


var $body = $('body'),
    $content = $('#content'),
    $form = $content.find('#loginform');


    //IE doen't like that fadein
    if(!$.browser.msie) $body.fadeTo(0,0.0).delay(500).fadeTo(1000, 1);


    $("input").uniform();


    $form.wl_Form({
        status:false,
        onBeforeSubmit: function(data){
            $form.wl_Form('set','sent',false);
            if(data.username || data.password){
                $.ajax({
                  type: "POST",
                  url: 'functions/login.php',
                  data: 'username=' + data.username + '&password=' + data.password + '',
                  success: function(data) {
                    if (data == "success") {
                        document.location="home.php";
                    } else {
                        alert(data);
                        $.wl_Alert("Login invalid, please try again.",'info','#content');
                    }
                  }
                });
            }else{
                $.wl_Alert('Please provide both a username and password to login.','info','#content');
            }
            return false;

        }                             
    });


});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-03 09:52:55

  1. 您正在使用mysqli,所以mysql_real_escape_string()。取而代之的是使用$mysqli->prepare()
  2. Anyways,,或者更好的是在连接到数据库之前使用mysql_real_escape_string()来准备您的查询,因此它返回FALSE。但这只是为了防止你使用mysql_*

更新:

交换mysqli_real_escape_string()中的参数时,需要首先传递$link标识符,然后将变量作为第二个传递。

无论如何,您最好准备并绑定param:

代码语言:javascript
复制
$db = dbConnect();
$username = $_POST['username'];
$password = md5($_POST['password']);
$sql = "SELECT * FROM `users` WHERE `username`= ? AND `password`= ?;"
$stmt = $db->prepare($sql);
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
if($stmt->num_rows == 0)
{
 echo "incorrect username and/or password";
}
else
{
  $row = $stmt->fetch_assoc();
   //...
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8366760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档