对SQL注入的用户输入进行编码

对SQL注入的用户输入进行编码

问题描述:

Goodmorning guys,对SQL注入的用户输入进行编码

我正在为我们的客户之一创建表单。运行窗体的服务器具有非常严格的防火墙。目前我们遇到了不接受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的方式来解码/编码字符串(特别是“意见”字段),因此防火墙没有问题张贴。

当然,我谷歌搜索和尝试不同的编码JS功能,但他们都没有伎俩。

一些帮助,将不胜感激。

+0

不知道是越来越过滤它的将是尝试并祈祷,直到它的工作原理,但在一个正确的开始最好的机会是使用[encodeURIComponent方法]( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) – Chase

+0

“运行窗体的服务器有一个非常严格的防火墙”。我想你应该查看防火墙的定义。 https://en.wikipedia.org/wiki/Firewall_(computing)有一个很好的总结。防火墙阻止端口,而不是数据。你实际上谈论的是验证提交数据的代码。这是在PHP代码中,而不是在任何防火墙中。我只提到这一点,因为它在计算中很有用,其中精确性就是一切,混淆会导致延迟和错误,从而使用正确的术语。 – ADyson

+0

但无论如何要回答这个问题,看看正在进行过滤的PHP代码是有用的,以及一些被阻止的事情的例子。无论如何,标点符号本身并不是一种执行注射攻击的手段 - 您确定这是决定性因素吗?如果确实如此,那么我认为他们的防止注入攻击的方法是有缺陷的,除非有其他商业原因拒绝某些角色。如果他们正确使用参数化查询等来编写他们的查询,它应该不需要严格 – ADyson

与托管公司一起,我们已经找到了解决方案。这是我现在的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);