By default, plone has some insecure defaults build-in. It is no real problem, as there are trade-offs for the safer alternatives. But you can make your site more secure with a few measures that are not too hard. In this first installment, I'm just going to worry you with two problems up front, I'll post later about the solution.
In default plone, passwords go over the wire in plain text. When you
submit the login form, you send over two parameters:
__ac_name=yourname
and __ac_password=yoursecretpassword
.
When someone is able to sniff the network traffic, this is one potential attack point. This could be remedied by encrypting the form data with https. Plone - or rather, zope - doesn't speak https, but that's not really the problem as you should put apache or squid in front of plone anyway.
After authentication, plone sets a cookie that gets passed on every subsequent request. Using firefox' LiveHttpHeaders extension is very instructive in this case:
GET /plone/folder_icon.gif HTTP/1.1 Host: localhost:3030 Accept: image/png,*/*;q=0.5 Cookie: __ac="dGVzdHVzZXI6cmV1dGVsCg%3D%3D"
To scare you even more: that cookie value looks pretty safe, but it
is a base64 encoded string. %3d
is urlencoded for =
, so replace
that and run the string through a base64 decoder:
$> echo dGVzdHVzZXI6cmV1dGVsCg== | base64 -d testuser:reutel
So that innocent-looking cookie contains our username testuser
and
password reutel
in basically plain text :-)
For potential solutions, see Plone secure login, the secure part
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):