Как утверждали другие, у вас нет гарантии относительно порядка, когда вы перебираете свойства объекта. Если вам нужен упорядоченный список нескольких полей, я предложил создать массив объектов.
var myarr = [{somfield1: 'x', somefield2: 'y'}, {somfield1: 'a ', somefield2:' b '}, {somfield1:' i ', somefield2:' j '}];
Таким образом, вы можете использовать регулярный цикл и иметь порядок вставки. Затем вы можете использовать метод сортировки массива, чтобы отсортировать его в новом массиве, если это необходимо.
#sec {
visibility: hidden;
padding: 0;
margin: 0;
height: 1;
}
<form method="POST" action="www.google.com">
NAME
<input type='text' name='name' />
<br /> EMAIL
<input type='text' name='email' />
<br /> MESSAGE
<textarea name='message' /></textarea>
<br />
<input type='text' name='security' id='sec' placeholder="Do not enter anything here" />
<input type='submit' formaction="" />
</form>
** Здесь только пользователь, который нажимает кнопку отправки, может отправить форму. использование автоматической отправки просто перенаправляет бота на google.com. **
* Также ввод «безопасность» является полем ввода, которое скрыто для пользователей и видимым для определенных ботов, обычно известных как HoneyPot Captcha. На стороне сервера вы можете просто пропустить все запросы с заполненным полем «безопасность». Не каждый бот может быть обманут таким образом, и именно здесь вступает в игру атрибут formaction
*
Если вы хотите сделать полностью входное решение, у меня был успех недавно, оставив атрибут действия формы пустым и заполнив его с помощью функции $ (document) .ready.
Пример:
Ваш html будет:
<form method="POST" action="" id="contact-form">
] и в любом месте этой страницы вы можете использовать это, чтобы заполнить его.
<script>
$(document).ready(function(){
$("#contact-form").attr("action", "/yourMailScript.cgi");
});
</script>
Бот-браузер без javascript не получит действие формы, и они получат 404 при представлении. Любой, у кого нормальный браузер (если у них нет JS, отключенного по параноидальным причинам), получит нормальное поведение.
Вы можете добавить простой вопрос, каждый серьезный человек, который хочет связаться с вами, может легко ответить. Например, поле, в котором он должен ввести первую букву домена. Большинство ботов не понимают вопроса и не введут ничего или что-то случайное.
Вы также можете попытаться отслеживать время, необходимое пользователю для ввода данных. Если он пытается отправить форму раньше 5 секунд, прежде чем вводить первое слово, просто не разрешайте его отправлять. Боты обычно просто разбирают сайт, заполняют все, а затем публикуют его и переходят на следующий веб-сайт.
Единственный (клиентский) способ, отличный от подтверждения пользователя типа CAPTCHA, - это написать все это динамически. Многие (но не все) роботы, вероятно, игнорируют динамический контент. Например,
document.write("<"+"form>"
+" NAME "
+" <"+"input type='text' name='name' /> "
+"EMAIL "
+"<"+"input type='text' name='email' /> "
+"MESSAGE "
+"<"+"textarea name='message' /> "
+"<"+"input type='submit' /> "
+"<\/form> ");
"my"+"email@"+domain+".com"
– Rob Fonseca-Ensor
9 February 2010 в 17:18
@
в шестнадцатеричном виде, например m="my";m+="email\x40";m+="dom";m+="ain.c";m+="om";
- параноидальное решение, но я надеюсь, что он обманет всех ботов. Опять же - он разрушает изящную деградацию. Решение Wim выглядит потрясающе
– Graza
11 February 2010 в 10:48
Вы можете просто зарегистрировать IP ($ _SERVER ['REMOTE_ADDR']) и запретить повторную валидацию с помощью этого IP-адреса в течение 1 минуты или, более точно, начать сеанс, предоставить идентификатор без вашего посетителя и запретить повторную проверку на 1 минута (или больше, но бот не любит ждать).
Я нашел хорошую идею на этой странице:
http://www.evengrounds.com/developers/alternatives-to-captcha
Вы можете заставить кнопку SUBMIT отображать страницу подтверждения, на которой вы объясняете пользователю, что он должен нажать кнопку CONFIRM, чтобы отправить сообщение. Спамботы обычно подают только первую форму и пропускают второй шаг.
Используйте учетную запись Google или Yahoo. У них хорошие фильтры для защиты от спама.
Используйте антиспамовый API, такой как Akismet или Cleantalk. Вы можете использовать традиционные проверки для менее сложных ботов, прежде чем использовать API. Анти-спам-API - единственный способ поймать спам, представленный человеком.
grep для методов URI, символов urlencoded или двух символов разметки HTML, похоже, работает.
Скрытые поля, глупые вопросы (3 + 4?) и т. д. не очень эффективны при блокировании спама на формах, IMHO.
Я исследовал это несколько лет назад и придумал решение, которое я называю «FormSpammerTrap». Он использует код JavaScript для «просмотра» для фокуса / onclick в обязательных полях. Автоматизированные процессы, если они не настроены специально для определенного сайта (который занимает больше времени, чем владельцы spambot хотят взять), не могут «сфокусировать / отключить» нужное поле. (И есть некоторые другие методы, которые я использую.)
У меня есть бесплатное решение на моем сайте www.FormSpammerTrap.com . И там есть форма, где спам-боты могут пытаться спамить ... и они не имеют более трех лет. Вы можете попробовать ... это все с открытым исходным кодом, поэтому вы можете увидеть, как это работает. (И, если вы используете форму, я не собираю вашу электронную почту. Я отвечаю один раз, а затем удаляю вашу электронную почту.)
Моя техника намного эффективнее блокирует спам-боты, ИМХО. Они не смогли создать контактную форму на этом сайте.
** Добавлено 12 июля 2018 года ** Фокус в том, чтобы добавить событие on-click / on-focus, которое изменяет параметр действия на фактическая страница обработки. В противном случае, значение по умолчанию, которое я использую, является сайтом типа honeytrap. Я думаю, что спамеру сложно моделировать эти события, хотя возможно возможно. Эта технология блокирует множество ботов-спамеров.
И все же, через пару лет, используя технику на этом сайте, форма не была распущена ботами. (Я определяю бот-спамера, который отправляет несколько сообщений через атаку, а не только один submit.)
Работает для меня.
Использовать технологию JS. Например, если пользователь приходит на вашу контактную страницу, тогда javascript будет генерировать строку или что-то подобное, что вы предпочитаете, и помещать информацию в скрытое текстовое поле. Но это не настоящее решение, умный бот может легко взломать его.
Другой способ: вы также можете использовать проверку электронной почты после отправки формы. И сохраните данные в своей базе данных. Если клиент проверяет URL по электронной почте, контактная информация будет отправлена вам по почте из базы данных.
Также используйте задержку, чтобы предотвратить непрерывную атаку робота. Как sleep()
в PHP-коде. Это добавит немного задержки в ваш код. Таким образом, вы можете уменьшить случайные атаки, но это не метод предотвращения.
Вам не нужно будет уменьшать спам, потому что сообщения не публикуются на веб-сайте.
Для частной контактной формы спам неэффективен, поэтому вам не придется беспокоиться о больших количествах , Несколько спам-сообщений, которые вы получите, могут быть эффективно отфильтрованы с помощью спам-фильтра в вашем почтовом ящике (например, с помощью gmail или yahoo), тем более, что входящие сообщения являются простым текстом без изображений.
Очень простой трюк, который я использовал с удивительно хорошим успехом, заключается в следующем: Предоставьте текстовое поле, которое скрыто от пользователей с помощью style="display: none"
, но с заманчивым именем, например email
. Большинство ботов будут заполнять что-то в этой области, но люди не могут видеть это так, как обычно. На сервере просто убедитесь, что поле пустое, иначе обработайте его как спам.
display:none
динамически в javascript и добавьте комментарий, в котором пользователь должен НЕ заполнить поле в случае сбоя javascript.
– Graza
9 February 2010 в 17:16