Взламывание собственного приложения

Вам просто нужно использовать std :: shared_ptr и std :: weak_ptr .

shared_ptr настолько умны, что вам не нужно их удалять, они будут удалены, когда никто больше на них не ссылается. Тогда любой weak_ptr, связанный с этим shared_ptr, будет в некотором роде проинформирован, и для него не будет риска получить доступ к нераспределенной памяти.

Когда это потребуется, weak_ptr попытается lock() создать локальный shared_ptr. Если исходный shared_ptr был удален, lock() не удастся создать локальный shared_ptr, и вы будете уверены, что исходный указатель был удален.

// Example program
#include 
#include 
#include 

int main()
{
    std::shared_ptr pI( new int(3) );
    std::weak_ptr wI( pI );

    {
        // check if weak_ptr still "points" to some valid data:
        std::shared_ptr pICopy = wI.lock();
        assert( pICopy != NULL );
        std::cout << "pI still valid " << *pICopy << std::endl;
    }

    pI.reset(); // this is equivalent to regular delete with shared_ptr

    {
        // check if weak_ptr does not "point" to any valid data:
        std::shared_ptr pICopy = wI.lock();
        assert( pICopy == NULL );
        std::cout << "pI not valid anyore" << std::endl;
    }
}

7
задан AstroCB 17 August 2014 в 21:00
поделиться

6 ответов

Книги Michael Howard являются хорошей начальной точкой;

Записи Там является загрузками ссылок и интересных статей из блога Michael Howard здесь

существует интересная презентация PowerPoint от Microsoft об оценке угрозы, рисках и ASP здесь .

5
ответ дан 6 December 2019 в 23:14
поделиться

Кроме всех очевидных ответов для предотвращения переполнения буфера кодируйте инжекцию, угон сессии и. al. необходимо найти, что кто-то еще проверяет код/программное обеспечение, потому что можно только думать о способах взломать программное обеспечение, которое Вы знаете, как предотвратить. Только потому, что Вы, can’t находят способ взломать Ваше собственное программное обеспечение, что doesn’t означают, что никто больше не может.

2
ответ дан 6 December 2019 в 23:14
поделиться

Это - что-то, что очень трудно для Вас сделать, и я думаю, что Вы приближаетесь к проблеме от неправильного угла. Если Вы пишете, что приложение любого размера, затем пытаясь иметь дело с безопасностью в конце, путем поиска особенных методов повреждения собственного программного обеспечения, почти невозможно.

Это по ряду причин. Вы уже думаете о своем программном обеспечении определенным способом. Вы думаете об особенных методах взаимодействия с ним, и Вы знаете, как добраться лучше всего из него. Вы не думаете об этом с точки зрения способов использовать его, и это - твердая вещь сделать с программным обеспечением, с которым Вы глубоко знакомы.

Другая проблема состоит в том, что задача этой точкой является слишком большой для контакта с. Любые проблемы, которые Вы действительно находите, могут открыть любое количество других проблем. Проверка защиты в масштабе всей системы нигде не рядом достаточно детализирована.

то, Что необходимо делать, думает о безопасности, в то время как Вы пишете программное обеспечение. Изучите лучшие практики и рассмотрите каждый метод и класс, который Вы пишете из перспективы безопасности. Это идет рука об руку с поблочным тестированием, попытайтесь рассмотреть то, что исходные данные могли сделать этой определенной частью моего повреждения программы. и затем соглашение с ними на том уровне.

После этого я думаю, что это - вопрос ответа быстро на любые проблемы безопасности, которыми Вы сделаны знающий.

2
ответ дан 6 December 2019 в 23:14
поделиться

Мелочи, с которыми я столкнулся через свой собственный опыт.

  • не используют динамический SQL, Вы затем уязвимы для Внедрения SQL. Скорее используйте SQL-запросы с параметрами.
  • не имеют идентификаторов постепенного увеличения как user_id = 1, 2, 3 и т.д. и т.д. и затем используют это в URL, something.aspx? user_id=1, я могу затем предположить следующий идентификатор и надежду сессии. То же для учетных записей и что когда-либо еще чувствительно.
  • Не упускают XSS, (перекрестные сценарии сайта). Если Вы принимаете ввод данных пользователем и храните его непосредственно, удостоверьтесь, что они не могут пойти, вставляют предупреждение () для их имени или чего-то.

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

1
ответ дан 6 December 2019 в 23:14
поделиться

Вы могли сделать намного хуже, чем чтение Ross Anderson Разработка безопасности книга. Первый выпуск загружаем как PDF и является хорошим чтением. Я не считал второй выпуск, но я подозреваю, что это лучше и имеет больше положительных героев в нем.

Действительно отмечают, что это - книга, которая объясняет, как создать безопасность в из запуска, не, как повредить безопасность, но выставка различных отказов безопасности должна дать Вам хорошую идею для того, где начать смотреть.

1
ответ дан 6 December 2019 в 23:14
поделиться

Для обеспечения приложения форм победы открывают его и пытаются сделать все, что не должен делать пользователь лямбды! Я объясню:

, Если Вы, "говорят, входите yes или no", пробуют A-Z, 0-9, потому что это - то, что некоторые пользователи делают, чтобы попытаться найти некоторое отслеживание стека, которое могло быть интересно. Так помещенные блоки проверки допустимости везде.

Остерегаются соединения с базами данных, но если Вы происходите из сети dev, необходимо более знать, чем я :).

самая твердая часть должна предостеречься об утечках памяти или материале как этот, но это находится в больших больших приложениях или в не хорошо разработанные приложения.

0
ответ дан 6 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: