针对SQL注入编码用户输入

时间:2017-10-12 06:58:49

标签: jquery ajax

Goodmorning的家伙,

我正在为我们的一位客户制作表格。运行表单的服务器具有非常严格的防火墙。目前我们遇到防火墙不接受certrain表单条目的问题,因为消息中有太多的点击标记 - 防火墙将此视为可能的SQL注入。

单击提交按钮后,AJAX请求将转到处理所有电子邮件发送的PHP文件。

$.ajax({
    type: "POST",
    url: '/wp-content/themes/THEMENAME/wp/actions/apply-position-mail.php',
    data: {
        job: $('input#jobtitle').val(),
        firstname: $('input#first-name').val(),
        lastname: $('input#last-name').val(),
        email: $('input#email').val(),
        phone: $('input#tel').val(),
        resume: filename,
        comments: comments
    }
});

简单地说,我正在寻找Javascript解码/编码字符串的方法(特别是'评论'字段),这样防火墙就没有问题发布了。

当然我用Google搜索并尝试了不同的编码JS函数,但没有一个能够解决这个问题。

一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

与托管公司一起,我们找到了解决方案。这是我现在的JS:

var formArray = $('form').serializeArray();
var returnArray = {};

for (var i = 0; i < formArray.length; i++) {
    returnArray[formArray[i].name] = formArray[i].value;
}

$.ajax({
    url: '[..]/apply-position-mail.php',
    type: "POST",
    data: JSON.stringify(returnArray),
    contentType: "application/json",
    success: function(data, msg) {
        console.log(msg, data);
    },
    error: function(data, msg) {
        console.log(msg, data);
    }
});

所有输入字段和值都在数组中收集并在发布之前进行字符串化。

在PHP中,这为我提供了发布的数据:

$rawPostData = file_get_contents('php://input');
$form = json_decode($rawPostData);