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 | | 'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords' |
8 | | ]; |
| 5 | var submit = $( 'input[type="submit"]' ); |
| 6 | wp.trac_security = { |
| 7 | badwords : [ |
| 8 | 'sql', 'trojan', 'rce', 'permissions', 'exploit', 'exploits', 'csrf', 'xss', 'sqli', |
| 9 | 'scripting', 'vulnerability', 'vulnerabilities', 'capability', 'capabilities', 'intrusion', |
| 10 | 'intrusions', 'cve', 'disclosure', 'hash', 'security', 'leakage', 'privilege', 'privileges', |
| 11 | 'compromise', 'escalation', 'injection', 'forgery', 'password', 'passwords' |
| 12 | ], |
10 | | intersect = function(a, b) { |
11 | | return $.grep(a, function(i) { |
12 | | return $.inArray(i, b) > -1; |
13 | | }); |
| 14 | intersect : function(a, b) { |
| 15 | return $.grep(a, function(i) { |
| 16 | return $.inArray(i, b) > -1; |
| 17 | }); |
| 18 | }, |
| 19 | |
| 20 | has_overlap : function(str, arr){ |
| 21 | var words = str.toLowerCase().replace(/[^a-z|\s]/g, '').split(' '), |
| 22 | overlap = this.intersect( words, arr); |
| 23 | |
| 24 | return ( overlap.length !== 0 ); |
| 25 | } |
16 | | $(document).ready( function() { |
17 | | var submit = $( 'input[type="submit"]' ); |
18 | | $( '#field-summary, #field-description' ).on( 'keyup', function() { |
19 | | var words, overlap; |
20 | | words = $(this).val().toLowerCase().split( /[^a-z]/ ); |
21 | | overlap = intersect( badwords, words ); |
22 | | |
23 | | if ( overlap.length === 0 ) { |
24 | | submit.prop( 'disabled', false ); |
25 | | $( '#security-question' ).hide(); |
26 | | return; |
27 | | } |
| 28 | function show_box(){ |
| 29 | // We have a potential problem here |
| 30 | submit.prop( 'disabled', true ); |
| 31 | if ( $( '#security-question' ).length !== 0 ){ |
| 32 | // We've already created the checkbox |
| 33 | $( '#security-question' ).show(); |
| 34 | } else { |
| 35 | // We need to add the checkbox |
| 36 | $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' + |
| 37 | ' I am <strong>not</strong> reporting a security issue</label>' + |
| 38 | ' — <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' ); |
| 39 | } |
29 | | // We have a potential problem here |
30 | | submit.prop( 'disabled', true ); |
31 | | if ( $( '#security-question' ).length !== 0 ){ |
32 | | // We've already created the checkbox |
33 | | $( '#security-question' ).show(); |
34 | | } else { |
35 | | // We need to add the checkbox |
36 | | $( '.buttons' ).before( '<p id="security-question"><label><input type="checkbox" name="sec_question" />' + |
37 | | ' I am <strong>not</strong> reporting a security issue</label>' + |
38 | | ' — <a href="http://make.wordpress.org/core/handbook/reporting-security-vulnerabilities/">report security issues to security@wordpress.org</a></p>' ); |
39 | | } |
40 | | }); |
41 | | $( '#propertyform' ).on( 'change', '#security-question input', function() { |
42 | | submit.prop( 'disabled', ! $(this).is( ':checked' ) ); |
43 | | }); |
| 41 | } |
| 42 | |
| 43 | function hide_box(){ |
| 44 | $('input[name="submit"]').prop('disabled', false); |
| 45 | $('#sec_question').hide(); |
| 46 | } |
| 47 | |
| 48 | jQuery('#field-summary, #field-description, #field-keywords').on('keyup', function(){ |
| 49 | var entry = $(this).val(); |
| 50 | |
| 51 | if ( wp.trac_security.has_overlap( entry, wp.trac_security.badwords ) ) { |
| 52 | show_box(); |
| 53 | } else { |
| 54 | hide_box(); |
| 55 | } |