Вам просто нужно использовать 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;
}
}
Книги Michael Howard являются хорошей начальной точкой;
Записи Там является загрузками ссылок и интересных статей из блога Michael Howard здесь
существует интересная презентация PowerPoint от Microsoft об оценке угрозы, рисках и ASP здесь .
Кроме всех очевидных ответов для предотвращения переполнения буфера кодируйте инжекцию, угон сессии и. al. необходимо найти, что кто-то еще проверяет код/программное обеспечение, потому что можно только думать о способах взломать программное обеспечение, которое Вы знаете, как предотвратить. Только потому, что Вы, can’t находят способ взломать Ваше собственное программное обеспечение, что doesn’t означают, что никто больше не может.
Это - что-то, что очень трудно для Вас сделать, и я думаю, что Вы приближаетесь к проблеме от неправильного угла. Если Вы пишете, что приложение любого размера, затем пытаясь иметь дело с безопасностью в конце, путем поиска особенных методов повреждения собственного программного обеспечения, почти невозможно.
Это по ряду причин. Вы уже думаете о своем программном обеспечении определенным способом. Вы думаете об особенных методах взаимодействия с ним, и Вы знаете, как добраться лучше всего из него. Вы не думаете об этом с точки зрения способов использовать его, и это - твердая вещь сделать с программным обеспечением, с которым Вы глубоко знакомы.
Другая проблема состоит в том, что задача этой точкой является слишком большой для контакта с. Любые проблемы, которые Вы действительно находите, могут открыть любое количество других проблем. Проверка защиты в масштабе всей системы нигде не рядом достаточно детализирована.
то, Что необходимо делать, думает о безопасности, в то время как Вы пишете программное обеспечение. Изучите лучшие практики и рассмотрите каждый метод и класс, который Вы пишете из перспективы безопасности. Это идет рука об руку с поблочным тестированием, попытайтесь рассмотреть то, что исходные данные могли сделать этой определенной частью моего повреждения программы. и затем соглашение с ними на том уровне.
После этого я думаю, что это - вопрос ответа быстро на любые проблемы безопасности, которыми Вы сделаны знающий.
Мелочи, с которыми я столкнулся через свой собственный опыт.
Это ни в коем случае не полный список. Просто материал, с которым я недавно столкнулся.
Вы могли сделать намного хуже, чем чтение Ross Anderson Разработка безопасности книга. Первый выпуск загружаем как PDF и является хорошим чтением. Я не считал второй выпуск, но я подозреваю, что это лучше и имеет больше положительных героев в нем.
Действительно отмечают, что это - книга, которая объясняет, как создать безопасность в из запуска, не, как повредить безопасность, но выставка различных отказов безопасности должна дать Вам хорошую идею для того, где начать смотреть.
Для обеспечения приложения форм победы открывают его и пытаются сделать все, что не должен делать пользователь лямбды! Я объясню:
, Если Вы, "говорят, входите yes
или no
", пробуют A-Z, 0-9, потому что это - то, что некоторые пользователи делают, чтобы попытаться найти некоторое отслеживание стека, которое могло быть интересно. Так помещенные блоки проверки допустимости везде.
Остерегаются соединения с базами данных, но если Вы происходите из сети dev, необходимо более знать, чем я :).
самая твердая часть должна предостеречься об утечках памяти или материале как этот, но это находится в больших больших приложениях или в не хорошо разработанные приложения.