Итоги…

К сожалению, пыл искать ошибки, проявленный читателями против программы из
«Головоломки
№2
" :), не дал должного эффекта в этой задаче.

Часть первая никем не решена. Может, это никому не интересно, а может, слишком
сложно. В любом случае, лучший выход — не оглашать «правильный ответ», пусть
желающие, если хотят, найдут его сами. Подсказка: копать в сторону работы
с модулями.

Если честно, то я ждал с десяток ответов на вторую часть, ибо она жутко проста,
но откликнулся один только dev0id.

—начало—
C:\>nslookup 
Default Server: 192.168.1.1 
Address: 192.168.1.1 

галочка говорит о том, что программа готова принять следующий
параметр (следующий хост), ну а мы введем несколько другое
— мы введем, к примеру, буковку «A» этак не меньше 297 раз
(единой строкой). Программа вылетит с сообщением об ошибке и записью в логе, следующего содержания: 

The application, nslookup.exe, generated an application error The error occurred on 03/05/2002 @ 06:17:50.299 The exception generated was c0000005 at
address 01007E68 (<nosymbols>)

что подтверждает переполнение. Этот раздел задачи оказался не таким уж и
сложным, как мне кажется…

Многих заинтриговала третья часть 🙂 Для решения надо было знать веб-программирование
и sql, хотя бы обзорно. Правильный ответ дал Pig Killer, что неудивительно — он
профессионально занимается и тем, и другим.

Описываемая ошибка популярна среди веб-программистов. Данные, получаемые от пользователя,
без всякой обработки вставляются внутрь sql-запроса, что не есть хорошо, потому что иногда
это позволяет прочесть те данные, которые никто читать не разрешает, или еще хуже — изменить
их. Правда, в случае с xakep.ru это вряд ли возможно, т.к. используется SQL Access, возможности которого очень ограничены.
SQL-запросы, используемые скриптом просмотра результатов голосования, выглядят примерно так:

select …. where themeid=<введенное пользователем значение> …

themeid иногда «светится», когда веб-сервер выдает сообщение об ошибке, и означает
он число — идентификатор темы опроса. Скрипт результатов голосования выводит все ответы, для
которых условие themeid=<введенное значение> справедливо. Ну а чтобы вывести все до единого
ответы, нужно, чтобы это условие было справедливо независимо от значения поля themeid.

Вот какие урлы позволяют это сделать:

http://www.xakep.ru/scripts/vote2/results-total.asp?id=0+or+true

themeid=0 or true — всегда «правда»

http://www.xakep.ru/scripts/vote2/results-total.asp?id=true

themeid=true — Access SQL, который и стоит на сервере, считает это «правдой».
Почему — фиг знает 🙂 Другие СУБД с ним не согласны.

Оставить мнение

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …