Итоги...
К сожалению, пыл искать ошибки, проявленный читателями против программы из
"Головоломки
№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, который и стоит на сервере, считает это "правдой".
Почему - фиг знает 🙂 Другие СУБД с ним не согласны.