Changeset 3443097
- Timestamp:
- 01/20/2026 09:48:16 AM (7 weeks ago)
- Location:
- la-sentinelle-antispam
- Files:
-
- 2 deleted
- 21 edited
- 3 copied
-
tags/4.1.0 (copied) (copied from la-sentinelle-antispam/trunk)
-
tags/4.1.0/admin/lasent-settingspage-formupdate.php (modified) (1 diff)
-
tags/4.1.0/admin/lasent-settingstab-forms.php (copied) (copied from la-sentinelle-antispam/trunk/admin/lasent-settingstab-forms.php)
-
tags/4.1.0/admin/lasent-settingstab-spamfilters.php (modified) (1 diff)
-
tags/4.1.0/forms/lasent-wordpress-comment-form.php (modified) (3 diffs)
-
tags/4.1.0/functions/lasent-settings.php (modified) (2 diffs)
-
tags/4.1.0/la-sentinelle.php (modified) (5 diffs)
-
tags/4.1.0/readme.txt (copied) (copied from la-sentinelle-antispam/trunk/readme.txt) (2 diffs)
-
tags/4.1.0/spamfilters/js/la-sentinelle-frontend.js (modified) (4 diffs)
-
tags/4.1.0/spamfilters/lasent-ajax.php (modified) (1 diff)
-
tags/4.1.0/spamfilters/lasent-check-spamfilters.php (modified) (1 diff)
-
tags/4.1.0/spamfilters/lasent-get-spamfilters.php (modified) (3 diffs)
-
tags/4.1.0/spamfilters/lasent-webgl.php (deleted)
-
tags/4.1.0/uninstall.php (modified) (1 diff)
-
trunk/admin/lasent-settingspage-formupdate.php (modified) (1 diff)
-
trunk/admin/lasent-settingstab-spamfilters.php (modified) (1 diff)
-
trunk/forms/lasent-wordpress-comment-form.php (modified) (3 diffs)
-
trunk/functions/lasent-settings.php (modified) (2 diffs)
-
trunk/la-sentinelle.php (modified) (5 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/spamfilters/js/la-sentinelle-frontend.js (modified) (4 diffs)
-
trunk/spamfilters/lasent-ajax.php (modified) (1 diff)
-
trunk/spamfilters/lasent-check-spamfilters.php (modified) (1 diff)
-
trunk/spamfilters/lasent-get-spamfilters.php (modified) (3 diffs)
-
trunk/spamfilters/lasent-webgl.php (deleted)
-
trunk/uninstall.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
la-sentinelle-antispam/tags/4.1.0/admin/lasent-settingspage-formupdate.php
r3397125 r3443097 79 79 } 80 80 81 if (isset($_POST['la_sentinelle-webgl']) && $_POST['la_sentinelle-webgl'] === 'on') {82 update_option( 'la_sentinelle-webgl', 'true', true );83 $saved = true;84 } else {85 update_option( 'la_sentinelle-webgl', 'false', true );86 $saved = true;87 }88 89 81 break; 90 82 -
la-sentinelle-antispam/tags/4.1.0/admin/lasent-settingstab-spamfilters.php
r3302815 r3443097 132 132 133 133 <tr> 134 <th scope="row"><label for="la_sentinelle-webgl"><?php esc_html_e('WebGL', 'la-sentinelle-antispam'); ?></label></th>135 <td>136 <input <?php137 if (get_option( 'la_sentinelle-webgl', 'false') === 'true') {138 echo 'checked="checked"';139 } ?>140 type="checkbox" name="la_sentinelle-webgl" id="la_sentinelle-webgl">141 <label for="la_sentinelle-webgl">142 <?php esc_html_e('Use WebGL.', 'la-sentinelle-antispam'); ?> <?php esc_html_e('(Experimental)', 'la-sentinelle-antispam'); ?>143 </label><br />144 <span class="setting-description">145 <?php146 esc_html_e('This will add a WebGL test to the form. It is a way to check for a real browser with 3D and WebGL enabled. If it does not validate, the entry will be marked as spam.', 'la-sentinelle-antispam');147 echo '<br />';148 esc_html_e('This spamfilter is experimental, it is possible that you get false-positives in your spamfolder. If this is the case, you are advised to disable this WebGL filter and report this on the support forum.', 'la-sentinelle-antispam');149 ?>150 </span>151 </td>152 </tr>153 154 <tr>155 134 <th colspan="2"> 156 135 <p class="submit"> -
la-sentinelle-antispam/tags/4.1.0/forms/lasent-wordpress-comment-form.php
r3116910 r3443097 129 129 } else if ( $marker === 'ajax' ) { 130 130 update_comment_meta( $id, 'la_sentinelle_ajax', 'spam' ); 131 } else if ( $marker === 'webgl' ) {132 update_comment_meta( $id, 'la_sentinelle_webgl', 'spam' );133 131 } 134 132 } … … 203 201 $la_sentinelle_sfs = get_comment_meta( $comment_id, 'la_sentinelle_sfs', true ); 204 202 $la_sentinelle_ajax = get_comment_meta( $comment_id, 'la_sentinelle_ajax', true ); 205 $la_sentinelle_webgl = get_comment_meta( $comment_id, 'la_sentinelle_webgl', true ); 206 207 if ( $la_sentinelle_nonce === 'spam' || $la_sentinelle_honeypot === 'spam' || $la_sentinelle_timeout === 'spam' || $la_sentinelle_sfs === 'spam' || $la_sentinelle_ajax === 'spam' || $la_sentinelle_webgl === 'spam' ) { 203 204 if ( $la_sentinelle_nonce === 'spam' || $la_sentinelle_honeypot === 'spam' || $la_sentinelle_timeout === 'spam' || $la_sentinelle_sfs === 'spam' || $la_sentinelle_ajax === 'spam' ) { 208 205 209 206 $output .= '<div class="misc-pub-section misc-pub-la-sentinelle"> … … 231 228 '; 232 229 } 233 if ( $la_sentinelle_webgl === 'spam' ) {234 $output .= '<span>• ' . esc_html__( 'Marked as spam by WebGL', 'la-sentinelle-antispam' ) . '</span><br />235 ';236 }237 230 238 231 $output .= '</div> -
la-sentinelle-antispam/tags/4.1.0/functions/lasent-settings.php
r3397125 r3443097 31 31 register_setting( 'la_sentinelle_options', 'la_sentinelle-timeout', 'sanitize_text_field' ); // 'true' 32 32 register_setting( 'la_sentinelle_options', 'la_sentinelle-version', 'sanitize_text_field' ); // string 33 register_setting( 'la_sentinelle_options', 'la_sentinelle-webgl', 'sanitize_text_field' ); // 'false'34 33 register_setting( 'la_sentinelle_options', 'la_sentinelle-woo-registration', 'sanitize_text_field' ); // 'false' 35 34 register_setting( 'la_sentinelle_options', 'la_sentinelle-wpcomment', 'sanitize_text_field' ); // 'true' … … 98 97 update_option( 'la_sentinelle-timeout', 'true', true ); 99 98 } 100 if ( get_option('la_sentinelle-webgl', false) === false ) {101 update_option( 'la_sentinelle-webgl', 'false', true );102 }103 99 if ( get_option('la_sentinelle-woo-registration', false) === false ) { 104 100 update_option( 'la_sentinelle-woo-registration', 'false', false ); -
la-sentinelle-antispam/tags/4.1.0/la-sentinelle.php
r3397125 r3443097 4 4 Plugin URI: https://timelord.nl 5 5 Description: Feel safe knowing that your website is safe from spam. La Sentinelle will guard your WordPress website against spam in a simple and effective way. 6 Version: 4. 0.46 Version: 4.1.0 7 7 Author: Marcel Pol 8 8 Author URI: https://timelord.nl … … 13 13 14 14 15 Copyright 2018 - 202 5Marcel Pol (marcel@timelord.nl)15 Copyright 2018 - 2026 Marcel Pol (marcel@timelord.nl) 16 16 Copyright 2023 ntodo 17 17 Copyright 2023 Barry / riceooks … … 42 42 43 43 // Plugin Version 44 define('LASENT_VER', '4. 0.4');44 define('LASENT_VER', '4.1.0'); 45 45 46 46 … … 48 48 * Todo: 49 49 * 50 * - Whitelist IP addresses (https://wordpress.org/support/topic/site-lockout-2). 50 51 * - Support and test bbPress and BuddyPress. 51 52 * - Add manually moved slider for when spammers start using JavaScript (like Ali Express). … … 85 86 require_once LASENT_DIR . '/spamfilters/lasent-stop-forum-spam.php'; 86 87 require_once LASENT_DIR . '/spamfilters/lasent-timeout.php'; 87 require_once LASENT_DIR . '/spamfilters/lasent-webgl.php';88 88 89 89 // Functions for the forms -
la-sentinelle-antispam/tags/4.1.0/readme.txt
r3436492 r3443097 4 4 Requires at least: 4.1 5 5 Tested up to: 6.9 6 Stable tag: 4. 0.46 Stable tag: 4.1.0 7 7 License: GPLv2 or later 8 8 Requires PHP: 7.0 … … 144 144 == Changelog == 145 145 146 = 4.1.0 = 147 * 2026-01-20 148 * Remove WebGL spamfilter, it's not reliable. 149 * Fix JavaScript error with Contact Form 7 refill. 150 146 151 = 4.0.4 = 147 152 * 2025-11-17 148 * Run JavaScript for ajax and we ggl only if enabled.153 * Run JavaScript for ajax and webgl only if enabled. 149 154 * Set autoload explicitly for options. 150 155 -
la-sentinelle-antispam/tags/4.1.0/spamfilters/js/la-sentinelle-frontend.js
r3397125 r3443097 3 3 * 4 4 5 Copyright 2018 - 202 5Marcel Pol (email: marcel@timelord.nl)5 Copyright 2018 - 2026 Marcel Pol (email: marcel@timelord.nl) 6 6 7 7 This program is free software; you can redistribute it and/or modify … … 55 55 var honeypot2 = la_sentinelle_frontend_script.honeypot2; 56 56 57 var honeypot_val = parseInt( form.querySelector(`input.${honeypot}`) .value, 10 );58 var honeypot2_val = parseInt( form.querySelector(`input.${honeypot2}`) .value, 10 );57 var honeypot_val = parseInt( form.querySelector(`input.${honeypot}`)?.value, 10 ); 58 var honeypot2_val = parseInt( form.querySelector(`input.${honeypot2}`)?.value, 10 ); 59 59 60 60 if ( ! isNaN( honeypot_val ) && (typeof honeypot_val != "undefined") && (typeof honeypot2_val != "undefined") ) { … … 108 108 var timeout2 = la_sentinelle_frontend_script.timeout2; 109 109 110 var timer = parseInt( form.querySelector(`input.${timeout}`) .value, 10 );111 var timer2 = parseInt( form.querySelector(`input.${timeout2}`) .value, 10 );110 var timer = parseInt( form.querySelector(`input.${timeout}`)?.value, 10 ); 111 var timer2 = parseInt( form.querySelector(`input.${timeout2}`)?.value, 10 ); 112 112 113 113 if ( ! isNaN( timer ) && ! isNaN( timer2 ) && (typeof timer != "undefined") && (typeof timer2 != "undefined") ) { … … 165 165 }); 166 166 }); 167 168 169 /*170 * Spamfilter with Canvas, Webgl and AJAX.171 *172 * @since 3.0.0173 */174 document.addEventListener("DOMContentLoaded", () => {175 document.querySelectorAll('form')?.forEach(function(form, index) {176 177 var webgl_enabled = la_sentinelle_frontend_script.webgl_enabled;178 if ( webgl_enabled !== 'true' ) {179 return;180 }181 182 la_sentinelle_canvas_webgl( form, index );183 184 // Hook into this.reset for Contact Form 7 refill.185 document.querySelector('form.wpcf7-form')?.addEventListener('reset', function() {186 var form = this;187 setTimeout(function() {188 la_sentinelle_canvas_webgl( form, index );189 }, 500 );190 });191 192 });193 });194 195 function la_sentinelle_canvas_webgl( form, index ) {196 197 var canvas_element = document.createElement('canvas');198 canvas_element.id = 'canvas-' + index;199 canvas_element.width = 20;200 canvas_element.height = 20;201 202 var returnvalue = form.querySelector('div.la-sentinelle-container')?.appendChild( canvas_element );203 204 if ( typeof returnvalue === "undefined" ) {205 // No sentinelle in this form.206 // console.log( 'undefined' );207 } else {208 // console.log( 'defined' );209 210 var canvas = document.querySelector( '#canvas-' + index );211 var gl = canvas.getContext( 'webgl' );212 213 // Only continue if WebGL is available and working214 if (gl === null) {215 console.info( 'Unable to initialize WebGL. Your browser or machine may not support it.' );216 return;217 }218 219 const pixels = new Uint8Array(220 gl.drawingBufferWidth * gl.drawingBufferHeight * 4221 );222 223 var webgl = la_sentinelle_frontend_script.webgl;224 var webgl_val = parseInt( form.querySelector(`input.${webgl}`).value, 10 );225 226 if ( (typeof webgl_val != 'undefined') ) {227 if ( webgl_val > 0 ) {228 var honey = webgl_val;229 }230 }231 232 if ( (typeof honey !== 'undefined') && ( ! isNaN( honey ) ) ) {233 // only one decimal allowed.234 honey = ( honey / 10 );235 honey = Math.round( honey );236 honey = ( honey / 10 );237 238 /* Step2: Define the geometry and store it in buffer objects */239 240 var vertices = [-0.5, 0.5, -0.5, -0.5, 0.0, -0.5,];241 242 // Create a new buffer object243 var vertex_buffer = gl.createBuffer();244 245 // Bind an empty array buffer to it246 gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);247 248 // Pass the vertices data to the buffer249 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);250 251 // Unbind the buffer252 gl.bindBuffer(gl.ARRAY_BUFFER, null);253 254 /* Step3: Create and compile Shader programs */255 256 // Vertex shader source code257 var vertCode =258 'attribute vec2 coordinates;' +259 'void main(void) {' + ' gl_Position = vec4(coordinates,0.0, 1.0);' + '}';260 261 //Create a vertex shader object262 var vertShader = gl.createShader(gl.VERTEX_SHADER);263 264 //Attach vertex shader source code265 gl.shaderSource(vertShader, vertCode);266 267 //Compile the vertex shader268 gl.compileShader(vertShader);269 270 //Fragment shader source code271 var fragCode = 'void main(void) {' + 'gl_FragColor = vec4(0.0, 0.0, 0.0, 0.1);' + '}';272 273 // Create fragment shader object274 var fragShader = gl.createShader(gl.FRAGMENT_SHADER);275 276 // Attach fragment shader source code277 gl.shaderSource(fragShader, fragCode);278 279 // Compile the fragment shader280 gl.compileShader(fragShader);281 282 // Create a shader program object to store combined shader program283 var shaderProgram = gl.createProgram();284 285 // Attach a vertex shader286 gl.attachShader(shaderProgram, vertShader);287 288 // Attach a fragment shader289 gl.attachShader(shaderProgram, fragShader);290 291 // Link both programs292 gl.linkProgram(shaderProgram);293 294 // Use the combined shader program object295 gl.useProgram(shaderProgram);296 297 /* Step 4: Associate the shader programs to buffer objects */298 299 //Bind vertex buffer object300 gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);301 302 //Get the attribute location303 var coord = gl.getAttribLocation(shaderProgram, "coordinates");304 305 //point an attribute to the currently bound VBO306 gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 0, 0);307 308 //Enable the attribute309 gl.enableVertexAttribArray(coord);310 311 /* Step5: Drawing the required object (triangle) */312 313 // Clear the canvas314 gl.clearColor(honey, honey, honey, 0.9);315 316 // Enable the depth test317 gl.enable(gl.DEPTH_TEST);318 319 // Clear the color buffer bit320 gl.clear(gl.COLOR_BUFFER_BIT);321 322 // Set the view port323 gl.viewport(0,0,canvas.width,canvas.height);324 325 // Draw the triangle326 gl.drawArrays(gl.TRIANGLES, 0, 3);327 328 gl.readPixels(329 0,330 0,331 gl.drawingBufferWidth,332 gl.drawingBufferHeight,333 gl.RGBA,334 gl.UNSIGNED_BYTE,335 pixels336 ); // Uint8Array337 338 var webgl2_val = pixels[0];339 var webgl2_field = la_sentinelle_frontend_script.webgl2;340 var webgl3_field = la_sentinelle_frontend_script.webgl3;341 form.querySelector(`input.${webgl2_field}`).value = webgl2_val;342 var webgl3_val = form.querySelector(`input.${webgl3_field}`).value;343 344 // Set up data to send345 var ajaxurl = la_sentinelle_frontend_script.ajaxurl;346 var data = new URLSearchParams({347 action: 'la_sentinelle_webgl',348 webgl2: webgl2_val,349 webgl3: webgl3_val350 });351 352 var request = new XMLHttpRequest();353 354 request.open('POST', ajaxurl, true);355 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');356 request.onload = function () {357 response = this.response.trim();358 if ( response === 'reported' ) { // We got what we wanted359 //console.log( 'reported' );360 } else {361 //console.log( 'not reported' );362 }363 };364 request.send(data);365 366 }367 }368 369 } -
la-sentinelle-antispam/tags/4.1.0/spamfilters/lasent-ajax.php
r3116910 r3443097 17 17 18 18 $field_name2 = la_sentinelle_get_field_name( 'ajax2' ); 19 $field_name3 = la_sentinelle_get_field_name( 'ajax3' ); // there is no ajax(1) , to keep it similar to webgl field order.19 $field_name3 = la_sentinelle_get_field_name( 'ajax3' ); // there is no ajax(1). 20 20 $field_id2 = la_sentinelle_get_field_id( $field_name2 ); 21 $field_id3 = la_sentinelle_get_field_id( $field_name3 ); // there is no ajax(1) , to keep it similar to webgl field order.21 $field_id3 = la_sentinelle_get_field_id( $field_name3 ); // there is no ajax(1). 22 22 $honeypot_value = (int) get_option( 'la_sentinelle-honeypot_value', 15 ); 23 23 $ajax3_value = sanitize_text_field( base64_encode( sanitize_text_field( $_SERVER['REMOTE_ADDR'] ) ) ); -
la-sentinelle-antispam/tags/4.1.0/spamfilters/lasent-check-spamfilters.php
r3012996 r3443097 19 19 la_sentinelle_check_timeout(); 20 20 la_sentinelle_check_ajax(); 21 la_sentinelle_check_webgl();22 21 23 22 // All filters are checked, now see if a check had a positive score. -
la-sentinelle-antispam/tags/4.1.0/spamfilters/lasent-get-spamfilters.php
r3397125 r3443097 32 32 } else if ( $filter === 5 ) { 33 33 $output .= la_sentinelle_get_ajax(); 34 } else if ( $filter === 6 ) {35 $output .= la_sentinelle_get_webgl();36 34 } 37 35 } … … 66 64 'timeout' => la_sentinelle_get_field_name( 'timeout' ), 67 65 'timeout2' => la_sentinelle_get_field_name( 'timeout2' ), 68 'webgl' => la_sentinelle_get_field_name( 'webgl' ),69 'webgl2' => la_sentinelle_get_field_name( 'webgl2' ),70 'webgl3' => la_sentinelle_get_field_name( 'webgl3' ),71 66 'ajax_enabled' => get_option( 'la_sentinelle-ajax' ), 72 'webgl_enabled' => get_option( 'la_sentinelle-webgl' ),73 67 74 68 ); … … 102 96 "timeout": "<?php echo la_sentinelle_get_field_name( 'timeout' ); ?>", 103 97 "timeout2": "<?php echo la_sentinelle_get_field_name( 'timeout2' ); ?>", 104 "webgl": "<?php echo la_sentinelle_get_field_name( 'webgl' ); ?>",105 "webgl2": "<?php echo la_sentinelle_get_field_name( 'webgl2' ); ?>",106 "webgl3": "<?php echo la_sentinelle_get_field_name( 'webgl3' ); ?>",107 98 }; 108 99 </script> -
la-sentinelle-antispam/tags/4.1.0/uninstall.php
r3116910 r3443097 35 35 'la_sentinelle-noptin', 36 36 'la_sentinelle-noptin_blocked', 37 'la_sentinelle-webgl', 37 'la_sentinelle-webgl', // deprecated since 4.1.0 38 38 'la_sentinelle-woo-registration', 39 39 'la_sentinelle-wpforms', -
la-sentinelle-antispam/trunk/admin/lasent-settingspage-formupdate.php
r3397125 r3443097 79 79 } 80 80 81 if (isset($_POST['la_sentinelle-webgl']) && $_POST['la_sentinelle-webgl'] === 'on') {82 update_option( 'la_sentinelle-webgl', 'true', true );83 $saved = true;84 } else {85 update_option( 'la_sentinelle-webgl', 'false', true );86 $saved = true;87 }88 89 81 break; 90 82 -
la-sentinelle-antispam/trunk/admin/lasent-settingstab-spamfilters.php
r3302815 r3443097 132 132 133 133 <tr> 134 <th scope="row"><label for="la_sentinelle-webgl"><?php esc_html_e('WebGL', 'la-sentinelle-antispam'); ?></label></th>135 <td>136 <input <?php137 if (get_option( 'la_sentinelle-webgl', 'false') === 'true') {138 echo 'checked="checked"';139 } ?>140 type="checkbox" name="la_sentinelle-webgl" id="la_sentinelle-webgl">141 <label for="la_sentinelle-webgl">142 <?php esc_html_e('Use WebGL.', 'la-sentinelle-antispam'); ?> <?php esc_html_e('(Experimental)', 'la-sentinelle-antispam'); ?>143 </label><br />144 <span class="setting-description">145 <?php146 esc_html_e('This will add a WebGL test to the form. It is a way to check for a real browser with 3D and WebGL enabled. If it does not validate, the entry will be marked as spam.', 'la-sentinelle-antispam');147 echo '<br />';148 esc_html_e('This spamfilter is experimental, it is possible that you get false-positives in your spamfolder. If this is the case, you are advised to disable this WebGL filter and report this on the support forum.', 'la-sentinelle-antispam');149 ?>150 </span>151 </td>152 </tr>153 154 <tr>155 134 <th colspan="2"> 156 135 <p class="submit"> -
la-sentinelle-antispam/trunk/forms/lasent-wordpress-comment-form.php
r3116910 r3443097 129 129 } else if ( $marker === 'ajax' ) { 130 130 update_comment_meta( $id, 'la_sentinelle_ajax', 'spam' ); 131 } else if ( $marker === 'webgl' ) {132 update_comment_meta( $id, 'la_sentinelle_webgl', 'spam' );133 131 } 134 132 } … … 203 201 $la_sentinelle_sfs = get_comment_meta( $comment_id, 'la_sentinelle_sfs', true ); 204 202 $la_sentinelle_ajax = get_comment_meta( $comment_id, 'la_sentinelle_ajax', true ); 205 $la_sentinelle_webgl = get_comment_meta( $comment_id, 'la_sentinelle_webgl', true ); 206 207 if ( $la_sentinelle_nonce === 'spam' || $la_sentinelle_honeypot === 'spam' || $la_sentinelle_timeout === 'spam' || $la_sentinelle_sfs === 'spam' || $la_sentinelle_ajax === 'spam' || $la_sentinelle_webgl === 'spam' ) { 203 204 if ( $la_sentinelle_nonce === 'spam' || $la_sentinelle_honeypot === 'spam' || $la_sentinelle_timeout === 'spam' || $la_sentinelle_sfs === 'spam' || $la_sentinelle_ajax === 'spam' ) { 208 205 209 206 $output .= '<div class="misc-pub-section misc-pub-la-sentinelle"> … … 231 228 '; 232 229 } 233 if ( $la_sentinelle_webgl === 'spam' ) {234 $output .= '<span>• ' . esc_html__( 'Marked as spam by WebGL', 'la-sentinelle-antispam' ) . '</span><br />235 ';236 }237 230 238 231 $output .= '</div> -
la-sentinelle-antispam/trunk/functions/lasent-settings.php
r3397125 r3443097 31 31 register_setting( 'la_sentinelle_options', 'la_sentinelle-timeout', 'sanitize_text_field' ); // 'true' 32 32 register_setting( 'la_sentinelle_options', 'la_sentinelle-version', 'sanitize_text_field' ); // string 33 register_setting( 'la_sentinelle_options', 'la_sentinelle-webgl', 'sanitize_text_field' ); // 'false'34 33 register_setting( 'la_sentinelle_options', 'la_sentinelle-woo-registration', 'sanitize_text_field' ); // 'false' 35 34 register_setting( 'la_sentinelle_options', 'la_sentinelle-wpcomment', 'sanitize_text_field' ); // 'true' … … 98 97 update_option( 'la_sentinelle-timeout', 'true', true ); 99 98 } 100 if ( get_option('la_sentinelle-webgl', false) === false ) {101 update_option( 'la_sentinelle-webgl', 'false', true );102 }103 99 if ( get_option('la_sentinelle-woo-registration', false) === false ) { 104 100 update_option( 'la_sentinelle-woo-registration', 'false', false ); -
la-sentinelle-antispam/trunk/la-sentinelle.php
r3397125 r3443097 4 4 Plugin URI: https://timelord.nl 5 5 Description: Feel safe knowing that your website is safe from spam. La Sentinelle will guard your WordPress website against spam in a simple and effective way. 6 Version: 4. 0.46 Version: 4.1.0 7 7 Author: Marcel Pol 8 8 Author URI: https://timelord.nl … … 13 13 14 14 15 Copyright 2018 - 202 5Marcel Pol (marcel@timelord.nl)15 Copyright 2018 - 2026 Marcel Pol (marcel@timelord.nl) 16 16 Copyright 2023 ntodo 17 17 Copyright 2023 Barry / riceooks … … 42 42 43 43 // Plugin Version 44 define('LASENT_VER', '4. 0.4');44 define('LASENT_VER', '4.1.0'); 45 45 46 46 … … 48 48 * Todo: 49 49 * 50 * - Whitelist IP addresses (https://wordpress.org/support/topic/site-lockout-2). 50 51 * - Support and test bbPress and BuddyPress. 51 52 * - Add manually moved slider for when spammers start using JavaScript (like Ali Express). … … 85 86 require_once LASENT_DIR . '/spamfilters/lasent-stop-forum-spam.php'; 86 87 require_once LASENT_DIR . '/spamfilters/lasent-timeout.php'; 87 require_once LASENT_DIR . '/spamfilters/lasent-webgl.php';88 88 89 89 // Functions for the forms -
la-sentinelle-antispam/trunk/readme.txt
r3436492 r3443097 4 4 Requires at least: 4.1 5 5 Tested up to: 6.9 6 Stable tag: 4. 0.46 Stable tag: 4.1.0 7 7 License: GPLv2 or later 8 8 Requires PHP: 7.0 … … 144 144 == Changelog == 145 145 146 = 4.1.0 = 147 * 2026-01-20 148 * Remove WebGL spamfilter, it's not reliable. 149 * Fix JavaScript error with Contact Form 7 refill. 150 146 151 = 4.0.4 = 147 152 * 2025-11-17 148 * Run JavaScript for ajax and we ggl only if enabled.153 * Run JavaScript for ajax and webgl only if enabled. 149 154 * Set autoload explicitly for options. 150 155 -
la-sentinelle-antispam/trunk/spamfilters/js/la-sentinelle-frontend.js
r3397125 r3443097 3 3 * 4 4 5 Copyright 2018 - 202 5Marcel Pol (email: marcel@timelord.nl)5 Copyright 2018 - 2026 Marcel Pol (email: marcel@timelord.nl) 6 6 7 7 This program is free software; you can redistribute it and/or modify … … 55 55 var honeypot2 = la_sentinelle_frontend_script.honeypot2; 56 56 57 var honeypot_val = parseInt( form.querySelector(`input.${honeypot}`) .value, 10 );58 var honeypot2_val = parseInt( form.querySelector(`input.${honeypot2}`) .value, 10 );57 var honeypot_val = parseInt( form.querySelector(`input.${honeypot}`)?.value, 10 ); 58 var honeypot2_val = parseInt( form.querySelector(`input.${honeypot2}`)?.value, 10 ); 59 59 60 60 if ( ! isNaN( honeypot_val ) && (typeof honeypot_val != "undefined") && (typeof honeypot2_val != "undefined") ) { … … 108 108 var timeout2 = la_sentinelle_frontend_script.timeout2; 109 109 110 var timer = parseInt( form.querySelector(`input.${timeout}`) .value, 10 );111 var timer2 = parseInt( form.querySelector(`input.${timeout2}`) .value, 10 );110 var timer = parseInt( form.querySelector(`input.${timeout}`)?.value, 10 ); 111 var timer2 = parseInt( form.querySelector(`input.${timeout2}`)?.value, 10 ); 112 112 113 113 if ( ! isNaN( timer ) && ! isNaN( timer2 ) && (typeof timer != "undefined") && (typeof timer2 != "undefined") ) { … … 165 165 }); 166 166 }); 167 168 169 /*170 * Spamfilter with Canvas, Webgl and AJAX.171 *172 * @since 3.0.0173 */174 document.addEventListener("DOMContentLoaded", () => {175 document.querySelectorAll('form')?.forEach(function(form, index) {176 177 var webgl_enabled = la_sentinelle_frontend_script.webgl_enabled;178 if ( webgl_enabled !== 'true' ) {179 return;180 }181 182 la_sentinelle_canvas_webgl( form, index );183 184 // Hook into this.reset for Contact Form 7 refill.185 document.querySelector('form.wpcf7-form')?.addEventListener('reset', function() {186 var form = this;187 setTimeout(function() {188 la_sentinelle_canvas_webgl( form, index );189 }, 500 );190 });191 192 });193 });194 195 function la_sentinelle_canvas_webgl( form, index ) {196 197 var canvas_element = document.createElement('canvas');198 canvas_element.id = 'canvas-' + index;199 canvas_element.width = 20;200 canvas_element.height = 20;201 202 var returnvalue = form.querySelector('div.la-sentinelle-container')?.appendChild( canvas_element );203 204 if ( typeof returnvalue === "undefined" ) {205 // No sentinelle in this form.206 // console.log( 'undefined' );207 } else {208 // console.log( 'defined' );209 210 var canvas = document.querySelector( '#canvas-' + index );211 var gl = canvas.getContext( 'webgl' );212 213 // Only continue if WebGL is available and working214 if (gl === null) {215 console.info( 'Unable to initialize WebGL. Your browser or machine may not support it.' );216 return;217 }218 219 const pixels = new Uint8Array(220 gl.drawingBufferWidth * gl.drawingBufferHeight * 4221 );222 223 var webgl = la_sentinelle_frontend_script.webgl;224 var webgl_val = parseInt( form.querySelector(`input.${webgl}`).value, 10 );225 226 if ( (typeof webgl_val != 'undefined') ) {227 if ( webgl_val > 0 ) {228 var honey = webgl_val;229 }230 }231 232 if ( (typeof honey !== 'undefined') && ( ! isNaN( honey ) ) ) {233 // only one decimal allowed.234 honey = ( honey / 10 );235 honey = Math.round( honey );236 honey = ( honey / 10 );237 238 /* Step2: Define the geometry and store it in buffer objects */239 240 var vertices = [-0.5, 0.5, -0.5, -0.5, 0.0, -0.5,];241 242 // Create a new buffer object243 var vertex_buffer = gl.createBuffer();244 245 // Bind an empty array buffer to it246 gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);247 248 // Pass the vertices data to the buffer249 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);250 251 // Unbind the buffer252 gl.bindBuffer(gl.ARRAY_BUFFER, null);253 254 /* Step3: Create and compile Shader programs */255 256 // Vertex shader source code257 var vertCode =258 'attribute vec2 coordinates;' +259 'void main(void) {' + ' gl_Position = vec4(coordinates,0.0, 1.0);' + '}';260 261 //Create a vertex shader object262 var vertShader = gl.createShader(gl.VERTEX_SHADER);263 264 //Attach vertex shader source code265 gl.shaderSource(vertShader, vertCode);266 267 //Compile the vertex shader268 gl.compileShader(vertShader);269 270 //Fragment shader source code271 var fragCode = 'void main(void) {' + 'gl_FragColor = vec4(0.0, 0.0, 0.0, 0.1);' + '}';272 273 // Create fragment shader object274 var fragShader = gl.createShader(gl.FRAGMENT_SHADER);275 276 // Attach fragment shader source code277 gl.shaderSource(fragShader, fragCode);278 279 // Compile the fragment shader280 gl.compileShader(fragShader);281 282 // Create a shader program object to store combined shader program283 var shaderProgram = gl.createProgram();284 285 // Attach a vertex shader286 gl.attachShader(shaderProgram, vertShader);287 288 // Attach a fragment shader289 gl.attachShader(shaderProgram, fragShader);290 291 // Link both programs292 gl.linkProgram(shaderProgram);293 294 // Use the combined shader program object295 gl.useProgram(shaderProgram);296 297 /* Step 4: Associate the shader programs to buffer objects */298 299 //Bind vertex buffer object300 gl.bindBuffer(gl.ARRAY_BUFFER, vertex_buffer);301 302 //Get the attribute location303 var coord = gl.getAttribLocation(shaderProgram, "coordinates");304 305 //point an attribute to the currently bound VBO306 gl.vertexAttribPointer(coord, 2, gl.FLOAT, false, 0, 0);307 308 //Enable the attribute309 gl.enableVertexAttribArray(coord);310 311 /* Step5: Drawing the required object (triangle) */312 313 // Clear the canvas314 gl.clearColor(honey, honey, honey, 0.9);315 316 // Enable the depth test317 gl.enable(gl.DEPTH_TEST);318 319 // Clear the color buffer bit320 gl.clear(gl.COLOR_BUFFER_BIT);321 322 // Set the view port323 gl.viewport(0,0,canvas.width,canvas.height);324 325 // Draw the triangle326 gl.drawArrays(gl.TRIANGLES, 0, 3);327 328 gl.readPixels(329 0,330 0,331 gl.drawingBufferWidth,332 gl.drawingBufferHeight,333 gl.RGBA,334 gl.UNSIGNED_BYTE,335 pixels336 ); // Uint8Array337 338 var webgl2_val = pixels[0];339 var webgl2_field = la_sentinelle_frontend_script.webgl2;340 var webgl3_field = la_sentinelle_frontend_script.webgl3;341 form.querySelector(`input.${webgl2_field}`).value = webgl2_val;342 var webgl3_val = form.querySelector(`input.${webgl3_field}`).value;343 344 // Set up data to send345 var ajaxurl = la_sentinelle_frontend_script.ajaxurl;346 var data = new URLSearchParams({347 action: 'la_sentinelle_webgl',348 webgl2: webgl2_val,349 webgl3: webgl3_val350 });351 352 var request = new XMLHttpRequest();353 354 request.open('POST', ajaxurl, true);355 request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');356 request.onload = function () {357 response = this.response.trim();358 if ( response === 'reported' ) { // We got what we wanted359 //console.log( 'reported' );360 } else {361 //console.log( 'not reported' );362 }363 };364 request.send(data);365 366 }367 }368 369 } -
la-sentinelle-antispam/trunk/spamfilters/lasent-ajax.php
r3116910 r3443097 17 17 18 18 $field_name2 = la_sentinelle_get_field_name( 'ajax2' ); 19 $field_name3 = la_sentinelle_get_field_name( 'ajax3' ); // there is no ajax(1) , to keep it similar to webgl field order.19 $field_name3 = la_sentinelle_get_field_name( 'ajax3' ); // there is no ajax(1). 20 20 $field_id2 = la_sentinelle_get_field_id( $field_name2 ); 21 $field_id3 = la_sentinelle_get_field_id( $field_name3 ); // there is no ajax(1) , to keep it similar to webgl field order.21 $field_id3 = la_sentinelle_get_field_id( $field_name3 ); // there is no ajax(1). 22 22 $honeypot_value = (int) get_option( 'la_sentinelle-honeypot_value', 15 ); 23 23 $ajax3_value = sanitize_text_field( base64_encode( sanitize_text_field( $_SERVER['REMOTE_ADDR'] ) ) ); -
la-sentinelle-antispam/trunk/spamfilters/lasent-check-spamfilters.php
r3012996 r3443097 19 19 la_sentinelle_check_timeout(); 20 20 la_sentinelle_check_ajax(); 21 la_sentinelle_check_webgl();22 21 23 22 // All filters are checked, now see if a check had a positive score. -
la-sentinelle-antispam/trunk/spamfilters/lasent-get-spamfilters.php
r3397125 r3443097 32 32 } else if ( $filter === 5 ) { 33 33 $output .= la_sentinelle_get_ajax(); 34 } else if ( $filter === 6 ) {35 $output .= la_sentinelle_get_webgl();36 34 } 37 35 } … … 66 64 'timeout' => la_sentinelle_get_field_name( 'timeout' ), 67 65 'timeout2' => la_sentinelle_get_field_name( 'timeout2' ), 68 'webgl' => la_sentinelle_get_field_name( 'webgl' ),69 'webgl2' => la_sentinelle_get_field_name( 'webgl2' ),70 'webgl3' => la_sentinelle_get_field_name( 'webgl3' ),71 66 'ajax_enabled' => get_option( 'la_sentinelle-ajax' ), 72 'webgl_enabled' => get_option( 'la_sentinelle-webgl' ),73 67 74 68 ); … … 102 96 "timeout": "<?php echo la_sentinelle_get_field_name( 'timeout' ); ?>", 103 97 "timeout2": "<?php echo la_sentinelle_get_field_name( 'timeout2' ); ?>", 104 "webgl": "<?php echo la_sentinelle_get_field_name( 'webgl' ); ?>",105 "webgl2": "<?php echo la_sentinelle_get_field_name( 'webgl2' ); ?>",106 "webgl3": "<?php echo la_sentinelle_get_field_name( 'webgl3' ); ?>",107 98 }; 108 99 </script> -
la-sentinelle-antispam/trunk/uninstall.php
r3116910 r3443097 35 35 'la_sentinelle-noptin', 36 36 'la_sentinelle-noptin_blocked', 37 'la_sentinelle-webgl', 37 'la_sentinelle-webgl', // deprecated since 4.1.0 38 38 'la_sentinelle-woo-registration', 39 39 'la_sentinelle-wpforms',
Note: See TracChangeset
for help on using the changeset viewer.