Rusty Razor Blade
Barebones list for the things you should be looking for when developing a web app in PHP. Some of it applies to all web apps, not just PHP.
- Use HTML_Safe (or a similar javascript stripping library) to check for and remove javascript when you’re accepting data that will be output to a page.
- Check every get and post variable for validity.
- Escape strings before sending to the database. Not doing so leaves you wide open to SQL injection.
- Make sure display_errors, magic_quotes, and register globals are all off. Log the errors to the error_log instead.
- If you have root access, don’t fall to far behind in stable releases. Bugs are fixed all the time.
- Do not blindly send mail to the address entered in a form. It’s easy for someone to perform header injection and spam thousands of people before you’ll even notice. Do not under any circumstances use Jack’s formmail. Your IP will get banned by major mail servers.
- Use a firewall/iptables. Turn off all ports you aren’t using.
- Do not write any sensitive data to a cookie. I thought this was obvious but I’ve seen it enough where I throw it in the list.
- Don’t put senstive directories in robots.txt as your only security. Password protect your admin areas.
- Back up your stuff offsite. Have the offsite computer connect to the server to download the backup, not the other way around.
Every web site has url like “dosomething.php?id=3″. Make sure that id you’re accepting is actually a number (or whatever type you’re allowing).
One Response to 10 (very) Basic Tips for PHP Web Application Security
Leave a Reply Cancel reply
Recent Comments
- Anil on MySQL Triggers Tutorial
- Ashish on MySQL Triggers Tutorial
- David on iCal Agenda
- jon on IP address geolocation SQL database
- pim on IP address geolocation SQL database
- jnns on Redis Wildcard Delete
- K.C. Murphy on iCal Agenda
- BA on Experts Exchange should be removed from Google search results
- Andrew on Executing multiple curl requests in parallel with PHP and curl_multi_exec
- Stu on Executing multiple curl requests in parallel with PHP and curl_multi_exec
Recent Posts
- New Project: Jester
- Open New Terminal Tip
- Installing MySQLdb on MacOS Lion
- Headless VM Server Using Ubuntu 11.10
- Get rid of Facebook’s Awful Ticker
- Api Tester now hosted on Github
- Trac .11 jQuery bug
- Multiple Filetypes in Vim
- Git Tip: Setting Up Your Remote Server
- Install issue pymongo on OSX (setuptools out of date)
Categories
- amazon (1)
- answerbag (6)
- apache (9)
- apple (8)
- awk (2)
- bbedit (2)
- c++ (3)
- chrome (2)
- cluster (1)
- cocoa (1)
- collective intelligence (1)
- curl (3)
- db2 (1)
- demand media (1)
- ebay (1)
- eclipse (4)
- erlang (13)
- facebook (1)
- fortran (1)
- gen_server (1)
- git (5)
- google (4)
- haddad (1)
- hdf5 (1)
- html (1)
- innodb (1)
- itunes (1)
- java (2)
- jester (1)
- kvm (1)
- launchbar (1)
- leex (1)
- letsgetnuts.com (1)
- libvirt (1)
- links (6)
- linux (27)
- lucene (1)
- mac (16)
- memcached (1)
- misconception (1)
- mobile (1)
- mono (1)
- mssql (1)
- munin (1)
- mysql (31)
- numpy (1)
- oracle (1)
- php (23)
- puppet (4)
- pyparsing (1)
- pytables (1)
- python (11)
- q&a (1)
- quicksilver (1)
- rant (6)
- readynas (1)
- redis (2)
- regex (1)
- replication (1)
- search (1)
- shitty code (1)
- solr (3)
- spaces (1)
- sshfs (1)
- stored procedure (1)
- svn (5)
- textmate (2)
- tips (22)
- trac (1)
- tutorial (4)
- ubuntu (3)
- Uncategorized (4)
- unix (1)
- vim (3)
- virtual box (6)
- vmware (1)
- weird (3)
- wikipedia (1)
- windows (1)
- xcode (1)








10 is a very good and often overlooked point! Working in a server hosting environment, I have on numerous occasions seen intrusions spread to in-house systems through compromised servers this way.
You would think no one in their right mind would leave an ssh key or password to an in-house server on a public facing machine, but oh yes.