[Seaside] Combating a possible DoS attack.
Nevin Pratt
nevin at bountifulbaby.com
Fri Jan 11 20:36:07 UTC 2008
The following code, if inserted into the initial Seaside processing, I
would think *should* help guard against a DoS attack. In this example,
'MemCheckCounter' is a class variable. I thought I would post this to
see what comments (if any) it generates.
Nevin
*******************
clearCacheIfMemoryUsageIsBig
"Every 'freq' requests, check and see if the image has grown bigger
than 'tooBig' number of bytes, and if so, clear all of the Seaside
handlers to release memory, and then garbage collection. Don't make
the check any more often than one out of every 'freq' times, just to be
more efficient. If we don't do this, and if we get a DoS attack, memory
will otherwise grow until the image hangs."
| tooBig freq |
freq _ 25.
tooBig _ 190000000.
MemCheckCounter isNil
ifTrue: [MemCheckCounter _ 0].
MemCheckCounter _ MemCheckCounter + 1.
MemCheckCounter > freq
ifTrue: [MemCheckCounter _ 1.
(Smalltalk getVMParameters at: 3)
> tooBig
ifTrue: [WADispatcher default entryPoints
do: [:ea | (ea respondsTo: #clearHandlers)
ifTrue: [ea clearHandlers]].
Smalltalk garbageCollect]]
More information about the seaside
mailing list