2013-01-02 109 views
1

在我的主頁上,我爲每個訪問者隨機進行民意調查。加載主頁後,自動HTTP GET觸發我的視圖爲該輪詢生成唯一的會話ID。這是爲了確保用戶確實對我在我看來爲他們隨機生成的投票進行投票,而不是僅僅手動構建他們自己的HTTP POST來對他們想要的投票進行投票。Django HTTP GET安全

但是,通過最初的HTTP GET,我還將唯一ID保存到我的數據庫,以便驗證他們將來的POST。如果用戶使用HTTP GET發送垃圾郵件來觸發多個數據庫寫入,這是否會產生安全問題?

我明白,HTTP GET不應該改變我的應用程序的狀態,但是這是適合HTTP GET的時候嗎?如果不是,我將如何解決這個困境?

當我用HTTP GET跨越我的服務器時,出現以下錯誤。這個錯誤是來自寫入我的數據庫還是其他內容?

Traceback (most recent call last): 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run 
    self.finish_response() 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response 
    self.write(data) 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 210, in write 
    self.send_headers() 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 268, in send_headers 
    self.send_preamble() 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 195, in send_preamble 
    self._write('Server: %s\r\n' % self.server_software) 
    File "/usr/lib/python2.7/socket.py", line 324, in write 
    self.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 104] Connection reset by peer 
---------------------------------------- 
Exception happened during processing of request from ('127.0.0.1', 58092) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 139, in __init__ 
    super(WSGIRequestHandler, self).__init__(*args, **kwargs) 
    File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__ 
    self.finish() 
    File "/usr/lib/python2.7/SocketServer.py", line 693, in finish 
    self.wfile.flush() 
    File "/usr/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 
+0

錯誤可能來自服務器超載,而不是來自您的應用程序。我真的不明白你想要達到什麼目的,但是要重新說話? –

+0

是的,我重寫了最好的我可以:)感謝您對超載服務器的洞察力,這是否可以在生產服務器上部署這個服務器而不是在開發服務器上進行修復? – user1431282

+0

使用生產服務器可以讓您爲更多的用戶提供服務,是的。關於您的使用案例,我並不十分明白爲單個用戶顯示投票的過程。 –

回答

1

如果這是您的問題,那麼您可以使用configure the sessions來不使用數據庫。你還有其他選擇:基於cookie的,基於文件的(可能並不比使用數據庫好得多)和緩存(內存,在這種情況下這不是一個好的選擇)。基於Cookie的會話會將數據存儲在用戶的計算機上,如果擔心使用會話數據填充服務器的垃圾郵件攻擊,這很好,但如果您擔心cookie操作攻擊,則會很糟糕。但是,Django Cookie已簽名並使用密鑰。希望這可以幫助!