WordPress 3 and Math Comment Spam Protection

Só para deixar uma nota mental: para que o plugin Math Comment Spam Protection funcione na versão 3 do WordPress é necessário editar a linha 211 do ficheiro math-comment-spam-protection.php que se apresenta como abaixo:

if (  ( !isset($user_ID) ) && ( $comment_data['comment_type'] ==) ) { // Do not check if the user is registered & do not check trackbacks/pingbacks

devendo a mesma adoptar a seguinte forma:

if (  ( !$user_ID ) && ( $comment_data['comment_type'] ==) ) { // Do not check if the user is registered & do not check trackbacks/pingbacks

(foi removida a função isset)

Fonte original em inglês aqui.

Eles conhecem a lei mas…

Tenho uma mensagem de correio electrónico, guardada na minha caixa de entrada à espera deste artigo, onde consta a seguinte informação:

Esta mensagem é enviada ao abrigo da legislação sobre Correio Electrónico, Artº 22º do Decreto-lei nº 7/2004 , de 7 de Janeiro que transpõe a Directiva nº 2000/31/CE, do Parlamento Europeu e do Conselho, de 8 de Junho de 2000. Um e-mail não poderá ser considerado SPAM quando inclui uma forma de ser removido.
Para não quer receber mais esta campanha é favor
Eliminar Subscrição ou Eliminar Registo(link removido por razões óbvias)

E assim reza o Artigo 22º do Decreto-lei n.º 7/2004:

Artigo 22.º
Comunicações não solicitadas

1 – O envio de mensagens para fins de marketing directo, cuja recepção seja independente de intervenção do destinatário, nomeadamente por via de aparelhos de chamada automática, aparelhos de telecópia ou por correio electrónico, carece de consentimento prévio do destinatário.

2 – Exceptuam-se as mensagens enviadas a pessoas colectivas, ficando, no entanto, aberto aos destinatários o recurso ao sistema de opção negativa.

3 – É também permitido ao fornecedor de um produto ou serviço, no que respeita aos mesmos ou a produtos ou serviços análogos, enviar publicidade não solicitada aos clientes com quem celebrou anteriormente transacções, se ao cliente tiver sido explicitamente oferecida a possibilidade de o recusar por ocasião da transacção realizada e se não implicar para o destinatário dispêndio adicional ao custo do serviço de telecomunicações.

4 – Nos casos previstos nos números anteriores, o destinatário deve ter acesso a meios que lhe permitam a qualquer momento recusar, sem ónus e independentemente de justa causa, o envio dessa publicidade para futuro.

5 – É proibido o envio de correio electrónico para fins de marketing directo, ocultando ou dissimulando a identidade da pessoa em nome de quem é efectuada a comunicação.

6 – Cada comunicação não solicitada deve indicar um endereço e um meio técnico electrónico, de fácil identificação e utilização, que permita ao destinatário do serviço recusar futuras comunicações.

7 – Às entidades que promovam o envio de comunicações publicitárias não solicitadas cuja recepção seja independente da intervenção do destinatário cabe manter, por si ou por organismos que as representem, uma lista actualizada de pessoas que manifestaram o desejo de não receber aquele tipo de comunicações.

8 – É proibido o envio de comunicações publicitárias por via electrónica às pessoas constantes das listas prescritas no número anterior.

Assim: qualquer comunicação electrónica não solicita só é legal se respeitar/cumprir as várias especificações de todos os pontos que compõem o Artigo transcrito. As demais que infringem o disposto num qualquer ponto deste mesmo Artigo são consideras SPAM por mais que apresentem um aviso legal como o presente nesta comunicação e/ou outros que a distanciem do SPAM abusivo.

AntiSpamMath

A propósito de uma necessidade específica que sentimos em forum.semmais.com escrevi este pequeno módulo em JavaScript, tendo como objectivo diferenciar entre computadores e humanos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
Script Name: 	AntiSpamMath
Script Version:	1.1
Script Date:	28/March/2009
Author Name: 	Paulo A. Silva
Author Email:	pauloasilva[at]gmail[dot]com
Author Website: http://www.pauloasilva.com
*/
 
function ASMath(ApplyTo)
{
	this.FormID = ApplyTo;
 
	this.operand1 = null;
	this.operand2 = null;
 
	this.answer = null;
 
 
	this.SetOperands();
	this.SetAnswer();
	this.SetForm();
}
 
ASMath.prototype.SetOperands = function()
{
	this.operand1 = Math.floor(Math.random() * 11);
	this.operand2 = Math.floor(Math.random() * 11);
 
	this.answer = this.operand1 + this.operand2;
}
 
ASMath.prototype.SetAnswer = function()
{
	var bits = [];
	var dividend = parseInt(this.answer);
	var remainder = 0;
 
	while (dividend >= 2) {
		remainder = dividend % 2;
		bits.push(remainder);
		dividend = (dividend - remainder) / 2;
	}
	bits.push(dividend);
	bits.reverse();
 
	this.answer = bits.join("");
	document.getElementById("ASMathA").value = this.answer;
}
 
ASMath.prototype.VerifyAnswer = function()
{
	var Answer = document.getElementById("ASMathQ");
 
	return Answer.value == this.operand1 + this.operand2;
}
 
ASMath.prototype.SetForm = function()
{
	var Form = document.getElementById(this.FormID);
	var Field = document.getElementById("ASMathQ");
 
	var Me = this;
 
	Field.value = Me.operand1 +' + '+ Me.operand2 +' = ?';
 
 
	Form.onsubmit = function()
	{
		if (!Me.VerifyAnswer())
		{
			alert("Are you sure you're human?\nDon't be shy, use your fingers!");
			return false;
		}
 
		return true;
	}
 
	Field.onfocus = function()
	{
		this.value = "";	
	}
 
	Field.onblur = function()
	{
		if(this.value == "")
		{
			Me.SetOperands();
			Me.SetAnswer();
			Field.value = Me.operand1 +' + '+ Me.operand2 +' = ?';
		}
	}
}

A integração num form HTML é bastante simples, merecendo mesmo assim um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
	<head>
		<title>Demo</title>
 
		<script language="JavaSript" type="text/javascript" src="AntiSpamMath_V2.js">
		</script>
	</head>
	<body>
 
		<form id="ASMathF" name="demo" action="demo" method="post">
			<input id="ASMathQ" type="text" name="ASMathQ" />
			<input id="ASMathA" type="hidden" name="ASMathA" />
			<input id="ASMathB" type="submit" name="Submit" value="Ok" />
		</form>
		<script type="text/javascript">
			var ASMath = new ASMath('ASMathF');
		</script>
	</body>
</html>

O código está disponível ao abrigo da licença Creative Commons by-nc-sa 2.5 Portugal podendo fazer o download a partir daqui: AntiSpamMath

Nota: Embora funcional, o campo “ASMathA” não estava a ser preenchido pelo que o código fonte foi actualizado.