我正在开发HTML5 CSS3 jQuery Mobile Cordova / PhoneGap应用程序。
第一页是登录名,其中包含用户名&密码并通过我的服务器上的PHP脚本运行它以连接到SQL数据库。
一切正常,但我似乎无法正确处理错误的登录。因为它是一个cordova应用程序,所以通过使用JSONP插件可以克服跨域问题,因此从服务器返回的任何信息都必须使用JSON格式化,否则ajax将引发错误。
即使我在登录时使用以下内容抑制默认错误消息: (0)使用error_reporting; 要么 将@更改为mysqlconnect / select db variables(不是函数本身)
服务器仍将返回垃圾:
Reload the page to get source for: http://www.heatingassets.com/authenticate.php?jsoncallback=jQuery111209247028061671368_1428682105651
&usrnm=xxxxx&pswd=xxxxx&_=142868210565
以明显非JSON格式搞砸了ajax。
我能做些什么来完全阻止从服务器返回的任何东西,除了我编码和返回的东西之外?
如果没有人知道有更安全的方式将用户名/密码信息传递给服务器,我会很感激!
更新:
上述从服务器返回的是在php文件中包含error_reporting(0)时发送的响应,否则返回您在注释中提到的内容。
JS:
$.ajax({
url: 'http://www.heatingassets.com/authenticate.php',
type: 'POST',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: '5000',
data: formData,
success: function(data){
if(data['success'] == true){
$("body").pagecontainer("change", "#pagetwo", {
allowSamePageTransition:true
});
} else if (data['success'] == false){
if(data['errors']['combo']){
if(data['errors']['opendb']){
alert('There was a problem opening the database :(');
} else {
alert('Incorrect login combo bro!');
}
}
}
},
error: function(){
alert("First ajax function error");
}
});
PHP:
<?php
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
session_start();
$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data
$username = $_REQUEST['usrnm'];
$password = $_REQUEST['pswd'];
$database = "u727397756_hadb";
$server = "mysql.hostinger.co.uk";
$con = mysqli_connect($server, $username, $password);
$opendb = mysqli_select_db($con, $database);
if(!$con) {
$errors['combo'] = 'Incorrect user pass combo. ';
};
if(!$opendb){
$errors['opendb'] = 'Could not open the database.';
}
if ( ! empty($errors)) {
$data['success'] = false;
$data['errors'] = $errors;
} else {
$data['success'] = true;
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
mysqli_close($con);
echo $_REQUEST['jsoncallback'] . '(' . json_encode($data) . ');';
}
?>