对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功能,但他们都没有伎俩。
一些帮助,将不胜感激。
答
与托管公司一起,我们已经找到了解决方案。这是我现在的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);
不知道是越来越过滤它的将是尝试并祈祷,直到它的工作原理,但在一个正确的开始最好的机会是使用[encodeURIComponent方法]( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) – Chase
“运行窗体的服务器有一个非常严格的防火墙”。我想你应该查看防火墙的定义。 https://en.wikipedia.org/wiki/Firewall_(computing)有一个很好的总结。防火墙阻止端口,而不是数据。你实际上谈论的是验证提交数据的代码。这是在PHP代码中,而不是在任何防火墙中。我只提到这一点,因为它在计算中很有用,其中精确性就是一切,混淆会导致延迟和错误,从而使用正确的术语。 – ADyson
但无论如何要回答这个问题,看看正在进行过滤的PHP代码是有用的,以及一些被阻止的事情的例子。无论如何,标点符号本身并不是一种执行注射攻击的手段 - 您确定这是决定性因素吗?如果确实如此,那么我认为他们的防止注入攻击的方法是有缺陷的,除非有其他商业原因拒绝某些角色。如果他们正确使用参数化查询等来编写他们的查询,它应该不需要严格 – ADyson