At 06:43 PM 2/14/2005 +0100, Stefan Esser wrote:
Hello,

recently there was a discussion on this list about variable filtering within PHP. Because of this discussion I have put a preview of Hardened-PHP 0.3.0 online at hardened-php.net. (This preview does not contain all new features but the variable filtering relevant ones.

It adds the following new ini directives:

Filtering Directives
--------------------

# Global Policy for Request Variables
#   allow - all not explicitly forbidden contents are allowed
#   deny - all not explicitly allowed contents are forbidden

hphp.request.policy = deny | allow

# Global Filter for Request Variables

hphp.request.filter = deny|allow /regexpattern/i

# Variable Specific Filter

hphp.request.varfilter = varname deny|allow /regexpattern/i

(The same directives exist variable type specific:
hphp.cookie.policy, hphp.post.policy, hphp.get.policy, ...)

Limiting Directives
-------------------
hphp.XXX.max_vars
hphp.XXX.max_name_length
hphp.XXX.max_totalname_length
hphp.XXX.max_value_length
hphp.XXX.max_array_depth
hphp.XXX.max_array_index_length

where XXX is request/get/post/cookie

Fileupload Directives
---------------------
hphp.upload.max_uploads         - maximum number of file uploads per request
hphp.upload.disallow_elf_files  - disallow uploaded ELF files
hphp.upload.verification_script - call this script to verify uploaded files

Additionally the log system was improved
Logging Directives
------------------
hphp.log.syslog = loglevels that should be logged through syslog (S_MEMORY is always logged through syslog)
hphp.log.syslog.facility = syslog facility
hphp.log.syslog.priority = syslog priority
hphp.log.sapi = loglevels that should be logged through sapi error log (f.e. apache error log)
hphp.log.script = loglevels thath should be logged through the logscript
hphp.log.script.name = script for logging (1st param f.e. S_MISC 2nd param: message)


loglevel  meaning
-----------------
S_MEMORY  Log memory errors, like carnary violations
S_VARS    Log dropped variables
S_INCLUDE Log malicious includes
S_FILES   Log malicious fileuploads
S_SQL     Log failed MySQL queries (f.e. someone trying to SQL inject)
S_MISC    Log other attacks (f.e. format string attacks)


PS.1: You see that all filtering directives do drop the variables and do NOT try to remove malicious content. Repairing malicious input is considered bad practise.

Once we have input filtering in PHP, it might be interesting for you to extend that work in your project but I understand you want to provide something ASAP for your user base. Probably some of the things you'd do wouldn't be suitable for the mainstream PHP user base.


PS.2: Anyone interested in suggesting a new name for Hardened-PHP? Obviously the PHP Group does consider Hardened-PHP as violator of the PHP license and demands/wants a name change.

How about Hardened Security for PHP? I guess that's a bit lame though :)

PS.3: Yes some of these feature are similiar in mod_security (with the exception that in Hardened-PHP they actually work)

:)

Andi

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to