Making WordPress.org

Changeset 1058


Ignore:
Timestamp:
12/22/2014 12:03:06 AM (12 years ago)
Author:
nacin
Message:

Update Trac security script. props jorbin, fixes #265.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/style/trac/trac-security.js

    r634 r1058  
     1/* global wp */
     2window.wp = window.wp || {};
     3
    14(function($) {
    2         var badwords, intersect;
    3         badwords = [
    4                 'sql', 'trojan', 'rce', 'permissions', 'exploit', 'exploits', 'csrf', 'xss', 'sqli',
    5                 'scripting', 'vulnerability', 'vulnerabilities', 'capability', 'capabilities', 'intrusion',
    6                 'intrusions', 'cve', 'disclosure', 'hash', 'security', 'leakage', 'privilege', 'privileges',
    7                 'escape', 'unescape', 'escaped', 'unescaped', 'escapes', 'escaping', 'unescaping', 'esc_',
    8                 'sanitize', 'unsanitize', 'sanitizes', 'unsanitizes', 'sanitized', 'unsanitized', 'sanitization',
    9                 'valid', 'invalid', 'validate', 'validates', 'validation',
    10                 'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords'
    11         ];
     5        var propertyform = $( '#propertyform' ),
     6                submit = propertyform.find( 'input[type="submit"]' );
    127
    13         intersect = function(a, b) {
    14                 return $.grep(a, function(i) {
    15                         return $.inArray(i, b) > -1;
    16                 });
     8        if ( $( document.body ).hasClass( 'security' ) ) {
     9                return;
     10        }
     11
     12        wp.trac_security = {
     13                badwords : [
     14                        'sql', 'trojan', 'rce', 'permissions', 'exploit', 'exploits', 'csrf', 'xss', 'sqli',
     15                        'scripting', 'vulnerability', 'vulnerabilities', 'capability', 'capabilities', 'intrusion',
     16                        'intrusions', 'cve', 'disclosure', 'hash', 'security', 'leakage', 'privilege', 'privileges',
     17                        'escape', 'unescape', 'escaped', 'unescaped', 'escapes', 'escaping', 'unescaping', 'esc_',
     18                        'sanitize', 'unsanitize', 'sanitizes', 'unsanitizes', 'sanitized', 'unsanitized', 'sanitization',
     19                        'valid', 'invalid', 'validate', 'validates', 'validation',
     20                        'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords',
     21                ],
     22
     23                intersect : function(a, b) {
     24                        return $.grep(a, function(i) {
     25                                return $.inArray(i, b) > -1;
     26                        });
     27                },
     28
     29                has_overlap : function(str, arr){
     30                        var words = str.toLowerCase().replace(/[^a-z|\s]/g, '').split(' '),
     31                                overlap = this.intersect( words, arr);
     32
     33                        return ( overlap.length !== 0 );
     34                }
    1735        };
    1836
    19         $(document).ready( function() {
    20                 var propertyform = $( '#propertyform' ),
    21                         submit = propertyform.find( 'input[type="submit"]' );
    22                 $( '#field-summary, #field-description' ).on( 'keyup', function() {
    23                         var words, overlap;
    24                         words = $(this).val().toLowerCase().split( /[^a-z]/ );
    25                         overlap = intersect( badwords, words );
    26                  
    27                         if ( overlap.length === 0 ) {
    28                                 submit.prop( 'disabled', false );
    29                                 $( '#security-question' ).hide();
    30                                 return;
    31                         }
     37        function show_box() {
     38                // We have a potential problem here
     39                submit.prop( 'disabled', true );
     40                if ( $( '#security-question' ).length !== 0 ) {
     41                        // We've already created the checkbox
     42                        $( '#security-question' ).show();
     43                } else {
     44                        // We need to add the checkbox
     45                        $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' +
     46                                '&nbsp;I am <strong>not</strong> reporting a security issue</label>' +
     47                                ' &mdash; <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' );
     48                }
    3249
    33                         // We have a potential problem here
    34                         submit.prop( 'disabled', true );
    35                         if ( $( '#security-question' ).length !== 0 ){
    36                                 // We've already created the checkbox
    37                                 $( '#security-question' ).show();
    38                         } else {
    39                                 // We need to add the checkbox
    40                                 $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' +
    41                                         '&nbsp;I am <strong>not</strong> reporting a security issue</label>' +
    42                                         ' &mdash; <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' );
    43                         }
    44                 });
    45                 propertyform.on( 'change', '#security-question input', function() {
    46                         submit.prop( 'disabled', ! $(this).is( ':checked' ) );
    47                 });
     50        }
     51
     52        function hide_box() {
     53                $( 'input[name="submit"]' ).prop( 'disabled', false );
     54                $( '#sec_question' ).hide();
     55        }
     56
     57        jQuery( '#field-summary, #field-description, #field-keywords' ).on( 'keyup', function() {
     58                var entry = $(this).val();
     59               
     60                if ( wp.trac_security.has_overlap( entry, wp.trac_security.badwords ) ) {
     61                        show_box();
     62                } else {
     63                        hide_box();
     64                }
    4865        });
    49 })(jQuery);
    5066
     67        propertyform.on( 'change', '#security-question input', function() {
     68                submit.prop( 'disabled', ! $(this).is( ':checked' ) );
     69        });
     70}(jQuery));
Note: See TracChangeset for help on using the changeset viewer.