sfXssSafePlugin
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:An alternative between escaping raw and escaping entities
# sfXssSafePlugin - Output Rich Text With Cross Site Scripting Protection #

## Overview ##

Between the `ESC_RAW` and `ESC_HTMLENTITIES`, symfony lacks one escaping level allowing to strip dangerous HTML code but leave the tags that just structure a content or apply a format to it.

The `sfXssSafePlugin` allows to clean a string to prevent XSS attacks. It provides a new escaping strategy, `ESC_XSSSAFE`, to escape tainted HTML strings entered by users. This escaping strategy removes all "dangerous" tags and attributes but keeps the safe ones. The plugin embarks the  An [HTML Putifier](http://htmlpurifier.org/) library and is fully unit-tested.

## Installation ##

### With PEAR ###

    > php symfony plugin-install http://plugins.symfony-project.com/sfXssSafePlugin
    
or
    
    > php symfony plugin:install sfXssSafePlugin --release=1.1.0

### Witout PEAR ###

Alternatively, if you don't have PEAR installed, you can download the latest package attached to this plugin's wiki page and extract it under your project's `plugins/` directory

## Usage ##

First of all, your application escaping strategy must be set to `both` or `on` to use this plugin. Check your `settings.yml` for the `escaping_strategy` parameter.

Include the helper in the templates where you want to use the new escaping strategy:

    


As explained in the [Symfony Book](http://www.symfony-project.org/book/1_0/07-Inside-the-View-Layer#Escaping%20Arrays%20and%20Objects), the methods of escaped objects accept an additionnal parameter for the escaping strategy. In addition to the core `ESC_HTMLENTITIES` and `ESC_RAW`, you can now use the `ESC_XSSSAFE` strategy.

    
    // In the action 
    $this->post = 'this is not nice ';
    
    // In the template
    get('post', ESC_XSSSAFE) ?>
     => 'this is not nice'
    
    // Without escaping
    get('post', ESC_RAW) ?>
     => an alert is displayed : XSS!


## Configuration ##

You can change the HTML Purifier configuration in your application's `app.yml` file, under the `sfXssSafePlugin` section. Refer to the plugin's `app.sample.yml` and to the [http://htmlpurifier.org/live/configdoc/plain.html HTML Purifier documentation] for further information.

Here is the default configuration used by the plugin if you don't add anything to your `app.yml`:

    all:
      sfXssSafePlugin:
        definition:
        
          HTML:
            TidyLevel:              medium   # Values : "none", "light", "medium", "heavy"
            Doctype:                null     # Accepts valid Doctypes, like 'XHTML 1.0 Transitional'
            Trusted:                false
    
          Core:
            Encoding:               UTF-8    # This directive only accepts ISO-8859-1 if iconv is not enabled
            RemoveInvalidImg:       true
            EscapeInvalidChildren:  false
            EscapeInvalidTags:      false
    
          CSS:
            AllowImportant:         false
    
          Filter:
            YouTube:                false    # Allow YouTube video embeded
    
          AutoFormat:
            AutoParagraph:          false
    
          URI:
            Disable:                false
            DisableExternal:        false
    
          Output:
            TidyFormat:             false


## More configuration ##

Although HTML Purifier contains a large set of elements and attributes, you can customize others elements or attributes.

The plugin contains a sample which show how to allow to display flash movies :

### Configuration sample ###

First add the following configuration in `app.yml` file :
 
    
    all:
      sfXssSafePlugin:
        definition:
        
          HTML:
            DefinitionID:              'allow flash movies' 
            DefinitionRev:             1
    
          AutoFormat:
            Custom:                    AddParam # injector : call class "HTMLPurifier_Injector_AddParam"
            Element:
              param:
                type:                  false
                contents:              Empty
                attr_includes:         false
                attr:
                  'name':              Text
                  'value':             Text
                  
              object:
                type:                  Inline
                contents:              'Optional: param | Flow | #PCDATA'
                attr_includes:          false
                attr:
                  'type*':             'Enum#application/x-shockwave-flash'
                  'width*':            Pixels
                  'height*':           Pixels
                  'data':              Text
                  'bgcolor*':          Text
                  'quality*':          Text
                  
              embed:
                type:                  Block
                contents:              Empty
                attr_includes:         false
                attr:
                  'type*':             'Enum#application/x-shockwave-flash'
                  'width*':            Pixels
                  'height*':           Pixels
                  'src*':              URI
                  'flashvars':         Text
                  'allowscriptaccess': 'Enum#never'
                  'enablejsurls':      'Enum#false'
                  'enablehref':        'Enum#false'
                  'bgcolor':           Text
                  'align':             Text
                  'quality':           Text
                  'wmode':             Text
                  'pluginspage':       URI
                  'saveembedtags':     Text
                  'salign':            Text
                  'scale':             Text
                  'name':              Text


`HTML.DefinitionID` is set to a unique identifier for your custom HTML definition. This prevents it from clobbering other custom definitions on the same installation.
`HTML.DefinitionRev` is a revision integer of your HTML definition.
`AutoFormat.Element` adds `param`, `object` and `embed` elements, with theirs allowed attributes.

### Add a custom attribute to clean ###

The same way you can add an attribute to an element with `AutoFormat.Attribute` :


    all:
      sfXssSafePlugin:
        definition:
          AutoFormat:
            Attribute:
              a:
                attr_name:             target
                def:                   'Enum#_blank,_self,_target,_top'
                
            
To allows multiple attributes to one tag, you can use this syntaxe :


    all:
      sfXssSafePlugin:
        definition:
          AutoFormat:
            Attribute:
              - {tag: a, attr_name: target, def: 'Enum#_blank,_self,_target,_top'}
              - {tag: a, attr_name: toto, def: Text}
                

### Override cleaner ###

Then you can clean more the added element overloading HTML Purifier.
For this, move the sample file `sfXssSafeObject.class.php` in the an autoloaded directory (`lib` of your project for instance).

The file contains the classes of transformation for each element.
There is also an auto-format injector that we called `AddParam` in our example.

### Cache ###

Finally, clear your cache to enable the autoloading Symfony feature to find the new classes.

## Changelog ##

### 2011-10-04 ### 

 * heristop : Implemented cache warmer

### 2011-10-04 | 1.1.0 ### 

 * heristop : Allows multiple attributes to one tag
 * heristop : Uses Cache.SerializerPath option instead of DefinitionImpl

### 2011-08-26 | 1.0.0 ### 

 * heristop : Migration to HTML Purifier 4.3

### 2009-10-02 | 0.9.5 ###

 * heristop : Migration to HTML Purifier 4.0

### 2009-05-29 | 0.9.2 ###

 * heristop : Added missing classes from HTML Purifier 3.3 library
 * heristop : Renamed `sfXssSafeObject.class` sample to avoid autoload

### 2009-05-27 | 0.9.1 Beta ###

 * heristop : Migration to HTML Purifier 3.3
 * keyes : Patch for Symfony 1.2

### 2008-11-08 | 0.8  ###

 * heristop : Migration to HTML Purifier 3.2

### 2008-06-27 | 0.6.1 Beta ###

 * heristop : Migration to HTML Purifier 3.1.1

### 2008-06-20 | 0.6.0 Beta ###

 * heristop : Adding customizable elements

### 2008-05-19 | 0.5.0 Beta ###

 * heristop: Initial version

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。