2011-10-02 50 views
1

我有一個網站使用訂單輸入表單,並在提交表單時發送尺寸相當大的POST請求。通過HTTP POST發送什麼特定數據可能導致HTTP 504錯誤?

然而,當一個特定的值在我們的表單變量(的OrderDetail),每次一個被傳遞沒有失敗,它會在瀏覽器中的錯誤頁面,並通過一個提琴手504錯誤。

以下是我昨晚通過Fiddler發送POST請求的一些測試示例。當「的OrderDetail =」值更改爲下面的它要麼成功提交或幾秒鐘後返回504錯誤:

這些那些失敗:

  • &的OrderDetail =交付+令狀+的+執行%3B +和+應用程序+對於+收入+預扣+訂單+到+洛杉磯+洛杉磯+縣+警長+ DASH +法院+服務+部門+每指令
  • & OrderDetail =交付+執行+收入+預扣+ Order + to + Los + Angeles + County + Sheriff + DASH + Court + Services + Division + per + instructions
  • & OrderDetail =交付+寫入+執行%3B +和+應用程序+ +收入+預扣+訂單+至+洛杉磯+洛杉磯+縣+警長
  • & OrderDetail =交付+寫入+執行%3B +對於應用+ +收益+預提+訂單+到+洛杉磯+洛杉磯+縣+警長
  • &的OrderDetail = +訂單+洛杉磯+洛杉磯+縣+ +預提+執行令狀+警長
  • &的OrderDetail =令狀+執行+ adsfsdfsdfsd +訂單+縣
  • &的OrderDetail = WD +執行+ adsfsdfsdfsd +訂單+計數

這讓我想到或許它與單詞「Exec」('Exec'和'Execution'throw errors,'exe'does not)和「Count」('County'and'計數」拋出錯誤,‘續’不)

不過,我還沒有看到任何這種特定的有關504錯誤的谷歌搜索提及。

關於解決這個問題的ColdFusion代碼,對於此頁沒有任何幻想。只是一個標準的形式發佈。我在應用程序文件中添加了一個cfmail測試,並且這些失敗永遠不會運行,所以這似乎在瀏覽器和IIS之間。我們在共享服務器上,所以我看不到太多,但。

奇怪的是,當&的OrderDetail =參數被改變爲這些值(非常類似於上述)中的一個,其結果是成功:

  • &的OrderDetail = WD +執行+ adsfsdfsdfsd +訂單+ COUN
  • &的OrderDetail = WD +執行+ adsfsdfsdfsd +訂單+ Conty
  • &的OrderDetail =令狀+ +的預提+訂單+執行+洛杉磯+洛杉磯+縣警長+
  • 預提的的OrderDetail =令狀+ + + ExecutionOrder洛杉磯+洛杉磯+縣警長+

在第三一個,我把 '訂單' 前 '執行' 和它的工作原理..

總長度這個POST請求的大約是4720個字符。我將這個字段的長度增加到其長度的5-6倍,並且他們通過了,所以它似乎與POST中「& OrderDetail」參數的值相關聯。

有關爲什麼此特定數據可能成爲Web服務器問題的任何想法?我從來沒有見過這種情況,對於幾乎所有其他請求都不會有任何問題。

還有一個有趣的提示:在POST請求中,這個變量非常接近參數列表的開始。如果我刪除它後面的所有內容,它沒有問題。雖然我無法確定下一行可能導致它的原因。如果有幫助,我可以發佈整個請求。

更重要的是,我只是想知道什麼可以符合FORM數據的「保留」或「非法」。一切看起來都正確地逃脫了,所以我不確定除了一些預處理的javascript之外還有什麼可以做的,以進一步逃避任何這樣的話。

謝謝!

+0

504是「網關超時」,它應該是完全不相關的。這是可重複的嗎? – bzlm

+1

如果您將接收POST的CFM模板修改爲CFDUMP表單範圍,然後中止,那麼您是否仍然收到錯誤?這將有助於隔離它是否是CF的上游引起的,或者是代碼中的某些內容。 –

+1

繼Adam的評論之後,如果修改CFM模板不會改變任何內容,請查看Application.cfc或Application.cfm(因爲它們可以在模板被調用之前執行代碼)。 –

回答

2

鑑於EXECCOUNT導致該錯誤的,而把ORDEREXEC之前,防止錯誤,這聽起來似乎正在從SQL注入攻擊的保護有缺陷的嘗試。

如果您有任何聲稱這樣做的軟件,我會看到是否(暫時)禁用它會停止發生問題。
(該軟件可能會在防火牆的水平,所以你可能需要跟你的系統管理者。)


重要的是,我還要檢查您在使用的OrderDetail的代碼庫,並確保無論何時在查詢中使用它時都使用cfqueryparam - 對於所有其他用戶提供的數據也是如此。

+0

感謝彼得。我在共享服務器上,所以我是試圖找到一種方法,我可以使用我們的數據輸入表單來重現這一點(因爲它需要在幾個級別進行身份驗證,我不能輕易授予技術支持人員) 如果我可以爲他們提供鏈接,他們可以看看它,但上面的請求導致網關超時,刪除OrderDetail參數後的所有內容允許請求處理,然後拋出一個標準錯誤(當然,因爲幾個字段丟失後提交過程)。 – mistergin