\0
- это символ завершения строки в языке C. Поскольку perl построен поверх C, в старые времена вы могли вводить этот «ядовитый нулевой байт», чтобы часть C читала строку
<IMG SRC=java
вместо всей строки, и, таким образом, возможно, пропустить все это, даже если вы пытались раздеть такие вещи, как SRC=javascript:
По большей части это больше не работает, потому что языки более высокого уровня довольно успешно справляются с такими атаками, убирая случайные символы управления, такие как \0
, перед тем как отправлять строки в подпрограммы более низкого уровня.
Вы можете прочитать больше об отравленном нуль-байте здесь: http://insecure.org/news/P55-07.txt или здесь: http://hakipedia.com/index.php/Poison_Null_Byte