Готовые решения тоже принимаются.ну fail2ban уже упоминали, он пожалуй самый известный. Хотя и не идеальный.
Нужно любым способом подменить исходный код, на другой файл, который лежит в отличной от DOCUMENT_ROOT директории.
dragenter
Срабатывает, когда перемещаемый элемент попадает на элемент-назначение. Обработчик этого события показывает, что элемент находится над объектом на который он может быть перенесен. Если же обработчика нет, либо он не совершает никаких действий перемещение по умолчанию запрещено. Это событие также используется для того, чтобы подсветить либо промаркировать объект над которым происходит перемещения в случае, если перемещение на данный элемент разрешено. Для детальной информации смотрите Specifying Drop Targets.
dragover
Данное событие срабатывает каждые несколько сотен милисекунд, когда перемещаемый элемент оказывается над зоной, принимающей перетаскиваемые элементы. Для детальной информации смотрите Specifying Drop Targets.
drop
The drop event is fired on the element where the drop occurred at the end of the drag operation. A listener would be responsible for retrieving the data being dragged and inserting it at the drop location. This event will only fire if a drop is desired. It will not fire if the user cancelled the drag operation, for example by pressing the Escape key, or if the mouse button was released while the mouse was not over a valid drop target. For information about this, see Performing a Drop.
dragend
Источник перетаскивания получит событие dragend event when the drag operation is complete, whether it was successful or not. This event is not fired when dragging a file into the browser from the OS. For more information about this, see Finishing a Drag.
1. видно "start", потом ошибка т.к. адрес неправильный
https://jsfiddle.net/L7exkgts/
2. в логе видно оба, хотя визуально незаметно. браузер не успевает отрисовать, т.к. вызов синхронный
https://jsfiddle.net/L7exkgts/1/
3. c асинхронным работает так, как вы хотели?
https://jsfiddle.net/L7exkgts/2/