Help my php site has been exploited or hacked. What can I do to make sure this does not happen again?
- Set register_globals to OFF
- Turn off Display Error/Warning Messages. Set display_error to ZERO.
- Never run unescaped queries
- Validate all user inputs. Items on Forms, in URLs and so on
- Move config.php and files containing Passwords to MySQL to a secure directory outside of the public_html folder
- Change permissions on any configuration files containing private information such as database passwords or email accounts to 440 so they cannot be written to and so there is no world permissions. If you need to edit them at a later time you will need to change it back to 640.
- Access Control: You don't want the user to have access to any Admin function or Clean up scripts
- The .htaccess file is your friend. Use it to deny access to your site or files. (We also have an easy IP Deny Manager tool in the cpanel)
- PHP can parse any valid script, whether it is called foo.php, very_long_name.php.php.php, or even deleteme.bat.
- Using the default extension of ".php" means that before your hackers start you have already told them you are using PHP.
- As mentioned, you can use any filename for your scripts - if you are using PHP for every script on your server, consider using the ".html" extension for your scripts and making PHP parse HTML files.
- You can change your file extension by adding this line to the .htaccess or turn it on via the Apache Handlers in the cPanel (AddHandler application/x-httpd-php5 .html)
- To protect against SQL injection attacks Sometimes hackers will try to screw up your database by inserting SQL code into your form input fields. They can for example, insert code that could delete all the data in your database!
- To protect against this, you need to use this PHP function:
- This function escapes (makes safe) any special characters in a string (programmers call text a 'string') for MySQL.
- You should take care to store your PHP files and the necessary passwords to access your MySQL databases in protected files or folders.
- The easy way to do this is to put the database access passwords in a file with a .inc.php extension (such as config.inc.php), and then place this file in a directory which is above the server's document root (and thus not accessible to surfers of your site).
- Then, refer to the file in your PHP code with a require_once command.
- By doing things this way, your PHP code can read the included file easily but hackers will find it almost impossible to hack your site.
You can find more information about hardening your PHP scripts at: PHPsec.org
Also, for security purposes, you can refer to these two websites: