Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.
например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.
public Class myClass
{
public int prop1 {get;set;}
}
Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref.prop1 = 1; //This line throws error
}
}
выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.
Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref = new myClass();
ref.prop1 = 1;
}
}
#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