Skip to main content
4 of 4
replaced http://drupal.stackexchange.com/ with https://drupal.stackexchange.com/

If you don't want Honeypot module as mentioned by Jimajamma, you can do it with Form API #attributes all right:

$form['pass'] = array(
  '#type' => 'password',
  '#title' => t('Password'),
  '#maxlength' => 64,
  '#size' => 15,
  '#attributes' = array('style' => array('display:none;'));
);

Of course it's easy to catch display:none in bot's code. It's also common and not so much harder to find out that class applied is styled with it in CSS. There are two methods that are not yet so easy to catch:

  • Using box model and overflow to make element hidden under other HTML boxes.
  • JavaScript code to move it out of sight or apply display: none to it

In both cases you shouldn't use obvious identifiers in html, like .honeypot or .hidden, as this will be probably easily found by the bot, too. Also, z-index usually isn't the way to go, as it tells bot "this element is under other one", or "this element is over other one, hides something".

Mołot
  • 21.9k
  • 8
  • 59
  • 112