1

私のホームページでは、訪問者ごとにランダムな投票があります。ホームページをロードすると、自動 HTTP GET によってビューがトリガーされ、そのポーリングの一意のセッション ID が生成されます。これは、ユーザーが必要な投票に投票するために独自の HTTP POST を手動で作成するのではなく、私のビューでランダムに生成した投票にユーザーが実際に投票していることを確認するためです。

ただし、その最初の 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
4

1 に答える 1

1

これが懸念される場合は、データベースを使用しないようにセッションを構成できます。他のオプションがあります: クッキーベース、ファイルベース (データベースを使用するよりもはるかに優れているかもしれません)、キャッシュ (メモリ、この場合は良い代替手段ではありません)。Cookie ベースのセッションでは、ユーザーのマシンにデータが保存されます。これは、スパム攻撃によってサーバーがセッション データでいっぱいになることを心配している場合は良いことですが、Cookie 操作攻撃が心配な場合は良くありません。ただし、django Cookie は署名されており、秘密鍵を使用します。お役に立てれば!

于 2013-01-02T22:11:47.583 に答える