П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 174934 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 71855 раз(а).

Учебник HTML.
Просмотров 72018 раз(а).

Руководство по PHP5.
Просмотров 42625 раз(а).

Хостинг через призму DNS.
Просмотров 49072 раз(а).

Подборка текстов стандартных документов.
Просмотров 43042 раз(а).

Учебник PHP - Самоучитель
Просмотров 49387 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 49622 раз(а).

Внешние атаки...
Просмотров 40175 раз(а).

Учебник PHP.
Просмотров 35200 раз(а).

SSI в примерах.
Просмотров 26508 раз(а).






 
 
| Добавить в избранное | Сделать стартовой Project.Net.Ru | Помощь




Проверка индексов

Первое правило, которому надо следовать, подсказано здравым смыслом: индексы, используемые для работы с массивом, должны всегда быть тщательно проверены. Неаккуратно написанный цикл вроде:

  for (i = 0; i <= n; i ++) {
    table [i] = ...
вероятно содержит ошибку из-за использования знака <= вместо <, так как производится доступ к памяти за пределами массива. Если в этом цикле это легко заметить, то сложнее это сделать в цикле, использующем уменьшающиеся индексы, так как вы должны быть уверены, что не опуститесь ниже нуля. В отличие от тривиального случая for(i=0; i<n ; i++), вы должны проверить алгоритм несколько раз (или даже попросить кого-нибудь сделать это для вас), особенно, если индекс изменяется внутри цикла.

Похожая проблема со строками: вы не должны забывать добавить один или более байт для завершающего нулевого символа. Одна из наиболее распространенных ошибок новичков - забыть о терминаторе строки. Хуже всего, что такие ошибки трудно выявить, так как непредсказуемые выравнивания переменных (например, компилирование с отладочной информацией) могут скрыть эту проблему.

Нельзя недооценивать индексы массива как угрозу безопасности приложения. Мы видели (смотри Phrack номер 55), что переполнение всего на один байт досточно, чтобы создать дыру в безопасности, вставив шеллкод в переменную окружения например.

  #define BUFFER_SIZE 128

  void foo(void) {

    char buffer[BUFFER_SIZE+1];

    /* конец строки */
    buffer[BUFFER_SIZE] = '\0';

    for (i = 0; i<BUFFER_SIZE; i++)
      buffer[i] = ...
  }

Назад | Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru