2017-10-12 49 views
0

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

回答

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);