Questions about digest authentication (and some other stuff)
- From: Matthew Brush <mbrush codebrainz ca>
- To: libsoup-list gnome org
- Subject: Questions about digest authentication (and some other stuff)
- Date: Thu, 06 Jun 2013 15:45:20 -0700
Hi,
I'm writing a server that uses HTTP digest authentication and I was 
wondering a few things:
Disclaimer: I'm not very knowledgeable about security stuff so please 
excuse me if the questions are stupid and/or naïve :)
1) Is there a recommended method/package for handling the actual 
user/password database? I didn't see much inside libsoup itself but 
wondered if anyone could recommend a suitable way to handle it? I'm 
currently just using a GKeyFile which works fine but I feel as though 
I'm re-inventing a wheel and probably introducing security holes without 
even being aware. Should I be looking at using something like libpam?
2) In my code I started off using some techniques that seemed reasonable 
like using mlock() to prevent the encoded password from being swapped to 
disk and using memset() to clear out the memory where the password 
is/was before freeing it. Once I started tying it into libsoup I 
realized that the API wants my code to allocate memory using GLIB's 
allocator and hand it over to libsoup to free. I checked out the source 
to see how hard it would be to add API functions to allow providing my 
own buffer but then I realized it's using the GLIB data checksums API 
internally and so even if I could provide my own buffer, it would 
ultimately end up somewhere else in memory that could be swapped to disk 
and (probably) won't get zeroed out before freeing. Am I being stupid 
and/or paranoid in wanting to take these measures, and if not, could 
someone recommend a way to work around the mentioned issues? I'm 
wondering, if some cracker is already accessing my swap file/partition 
and/or recycled memory, is it pretty much pointless/too-late to be 
worrying about somewhat weakly encoded passwords getting into there?
3) Does libsoup use/have any means of doing key-stretching and/or 
salting? On a similar vein, does it implement any means of limiting 
denial of service attacks or brute force password cracking attempts or 
is this left to the user to do based on their specific requirements? 
Would there be any value in me adding a simple sleep call (say for 1 
second or so) in the auth-callback to slow down a dictionary attack or such?
-- not security related --
4) Is there any way to get access to the raw socket fd (or GSocket even) 
for a client connection in a way that it can be safely written to 
outside of libsoup? I read in the API docs for the _get_fd() function 
that one shouldn't fiddle with the socket on its own, so I'm a little 
stumped on how to do it correctly. I'm using GStreamer and its 
multifdsink/multisocketsink in order to make the pipeline stream to 
multiple clients, and I would really like to avoid re-implementing that 
plugin's code/logic in order to make one that can write to the soup 
response buffer instead of a file descriptor/socket (or does such a 
plugin already exist?).
Thanks in advance for any tips, tricks, advice, search terms or links.
P.S. libsoup is awesome!
Cheers,
Matthew Brush
[Date Prev][
Date Next]   [Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]