Opencats Applicant Tracking System
opencats.org
opencats.org
- Every table uses MyISAM. Interesting choice, but maybe the fancy features of InnoDB aren't really needed.
- HTML in the database for storing page templates. The entire workflow in terms of HTML views of the application process are stored in the database. That's got to be rough to maintain. https://github.com/opencats/OpenCATS/blob/77c1f2bcf1bc92f4ca...
- Uses mcrypt (not for passwords), which is deprecated and also abandonware. https://github.com/opencats/OpenCATS/blob/77c1f2bcf1bc92f4ca...
- Passwords appear to be stored as md5 hashes. https://github.com/opencats/OpenCATS/blob/77c1f2bcf1bc92f4ca...
- Yep, md5. https://github.com/opencats/OpenCATS/blob/77c1f2bcf1bc92f4ca...
This gives me flashbacks of early career codebases. I've seen so many of the mistakes here (including the HTML in the db. God, I remember the original dev being so proud of that mistake. 2 devs working on the same page? Who's going to overwrite the other's html?)
How would you do it nowadays? I still write a lot of small scripts and rarely have more state to maintain for a user session than conveniently fits in PHP's session mechanism. It's usually $_SESSION['loggedin']=bool, ['userid']=x, and perhaps a few convenience fields that are shown on every page to avoid unnecessary database roundtrips like name and anti-csrf token.
It's file-based so it probably doesn't work on multiple servers (I think you can also configure it to be database-backed, but from what I remember that's nearly as much work as just writing a proper solution yourself if you need that sort of scale), but until your software doesn't fit on a single, medium-beefy server anymore, is there an issue with this session global?
(Assuming you don't have a runaway dev that thinks they need to replicate every vaguely user-related field into the session or something. I never saw that, but with php being a common beginner's language, I could see how some people here might have run into that or have a similar argument. I think you'd have issues with such a guy/gal no matter what.)
The main issue with $_SESSION was that it is very easy to create a giant multidimensional array and have inconsistent logic creating fields. Another advantage is to bring the session variable in line with that of other languages so that devs switching languages won't be WTF as often
1. https://github.com/opencats/OpenCATS/blob/develop/lib/Candid...
2. https://github.com/opencats/OpenCATS/blob/77c1f2bcf1bc92f4ca...
FIXME: Security issue, this function is not enough for sanitizing user input.
Not off to a good start.In addition, the license that it uses has restrictions and is not OSI approved, so some people wouldn't call it Open Source.
Is there demand for an Open Source Applicant Tracking System to be created?
If you would be interested, please comment here: https://github.com/rhc2104/hiringhats/issues/1
PHP 7.0 was released in December 2015...
Consider who uses this -- and I don't mean that recruiters have zero technical knowledge (rumor has it that some do) but rather that an applicant will see very little if anything of this. If you test and secure those public fields properly and make sure the rest is behind basic auth with individual user credentials, you probably covered your threat model. XSS/CSRF vulns potentially cause you to lose track of who put that exploit in (one user could have put an exploit in that makes another do something), so you know it was an insider, just not who. Once you have your update management figured out (at least for public systems) and people no longer click attachments to invite ransomware (I have yet to see a single client with these two boxes ticked), rewriting your internal limited-to-recruiters applicant system might be the next thing to tackle.
I went though the demo application and it looked like that functionality is not present.