ajax防止sql注入的方法:
將以下代碼放在公用的js里面即可,如:
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded;charset=utf-8",
beforeSend: function() { //發送前執行的函數
try {
/**
* 當 processData: false,此時后臺接收的值都會是object類型。此時應該把所有參數拿出來做成序列化形式 如:"name=bill&age=18" 否則后臺無法接收
* 當 processData: true或者不設置時 json數據是已經序列化成字符類型 。如:"name=bill&age=18"。應用以下方法;
*/
//var params = arguments[1].data;
//if (params !== "" || params !== null) {
// var re = /select|update|delete|truncate|join|union|exec|insert|drop|count|’|--|"|=|;|>|<|%/i;
// params.split('&').forEach(function (item) { //js的forEach()方法
// item = item.split("=");
// var name = item[0];//名稱
// var val = item[1];//值
// if (re.test(item[1])) {
// alert("請勿輸入非法字符");
// arguments[0].abort(); //終止請求
// //請求方法記錄相關日志
// //location.href = arguments[1].data.replace(sQuery, "");
// }
// });
//}
var params = arguments[1].data; //arguments是一個兩個值的數組分別是0和1
re = /select|update|delete|truncate|join|union|exec|insert|drop|count|’|--|"|=|;|>|<|%/i; //可以根據需求自定義加減
for(var key in params) {
console.log(params[key]);
if(re.test(params[key])) {
alert("請勿輸入非法字符");
arguments[0].abort(); //終止請求
//請求方法記錄相關日志
//location.href = params.replace(sQuery, "");//跳轉到某個頁面
}else{
//加密在此處做。后臺可以做全局統一解密
//此時應該把所有參數拿出來做成序列化形式 如:"name=bill&age=18" 否則后臺無法接收
}
}
} catch(e) {
console.log(e);
//請求方法記錄相關日志
}
},
complete: function(XMLHttpRequest, textStatus) {
try {
//通過XMLHttpRequest取得響應頭,sessionstatus,
//var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
//if(sessionstatus == "timeout") {
//如果超時就處理 ,指定要跳轉的頁面(比如登陸頁)
//}
//此處可以對響應回來的數據進行解密
debugger;
if(textStatus !== "error") {
//通過XMLHttpRequest取得響應結果
var res = XMLHttpRequest.responseText;
var jsonData = JSON.parse(res);
console.log(jsonData);
if(jsonData.state == -1) {
//如果超時就處理 ,指定要跳轉的頁面(比如登陸頁)
alert(jsonData.msg);
window.location.replace("/login/index.php");
} else if(jsonData.state == 0) {
//其他的異常情況,給個提示。
alert(jsonData.msg);
} else {
//正常情況就不統一處理了
}
}
//請求方法記錄相關日志
} catch(e) {
console.log(e);
//請求方法記錄相關日志
}
},
error: function(jqXHR, textStatus, errorMsg) { // 出錯時默認的處理函數
try {
// jqXHR 是經過jQuery封裝的XMLHttpRequest對象
// textStatus 可能為: null、"timeout"、"error"、"abort"或"parsererror"
// errorMsg 可能為: "Not Found"、"Internal Server Error"等
// 提示形如:發送AJAX請求到"/index.html"時出錯[404]:Not Found
alert('發送AJAX請求到"' + this.url + '"時出錯[' + jqXHR.status + ']:' + errorMsg);
//請求方法記錄相關日志
} catch(e) {
console.log(e);
//請求方法記錄相關日志
}
},
statusCode: { //自定義返回消息
404: function() {
alert('數據獲取/輸入失敗,沒有此服務。404');
},
504: function() {
alert('數據獲取/輸入失敗,服務器沒有響應。504');
},
500: function() {
alert('服務器有誤。500');
}
},
processData: false, //默認不序列化參數//dataFilter:對響應的數據進行過濾
});