Кіріспе

Дұрыс нысанға сілтеме жасамайтын меңзер. Компьютерлік бағдарламалауда, аспаптық меңзерлер (dangling pointers) және жапайы меңзерлер (wild pointers) – тиісті типтегі жарамды нысанға сілтеме жасамайтын меңзерлер. Бұл есте сақтау қауіпсіздігін бұзудың ерекше жағдайлары. Жалпы алғанда, аспаптық сілтемелер (dangling references) және жапайы сілтемелер (wild references) – жарамды мақсатқа шешімін таппаған сілтемелер. Аспаптық меңзерлер объектіні жою кезінде пайда болады, егер кіріс сілтемесі бар объект өшірілсе немесе босатылса, меңзердің мәнін өзгертпей, меңзер әлі де босатылған жадтың жад орнын көрсетеді. Жүйе бұрын босатылған жадыны қайта бөлуі мүмкін, ал егер бағдарлама (қазіргі) аспаптық меңзерді қолданса, күтпеген мінез-құлық пайда болуы мүмкін, өйткені жадыда қазір мүлдем басқа деректер болуы мүмкін. Егер бағдарлама аспаптық меңзер арқылы жадыға жазса, байланысты емес деректердің үндемеу бұзылуы болуы мүмкін, бұл өте қиын болатын нәзік қателерге әкелуі мүмкін. Егер жад басқа процеске қайта бөлінген болса, онда аспаптық меңзерді қолдануға тырысу сегментация қателеріне (UNIX, Linux) немесе жалпы қорғаныс қателеріне (Windows) әкелуі мүмкін. Егер бағдарламаның ядроның жад бөлгіші пайдаланатын бухгалтерлік деректерді ауыстырып жазуға мүмкіндік беретін жеткілікті артықшылықтары болса, бүліну жүйелік тұрақсыздыққа әкелуі мүмкін. Қоқыс жинаушы объектіге бағдарланған тілдерде, аспаптық сілтемелерге қол жетпейтін объектілерді жою арқылы ғана жол берілмейді, яғни олардың кіріс көрсеткіштері жоқ; бұл іздену немесе сілтемелерді санау арқылы қамтамасыз етіледі. Алайда, finalizer бір нысанға жаңа сілтемелер жасай алады, бұл сілтемені тоқтату үшін нысанды қайта тірілтуді қажет етеді. Жапайы меңзерлер (wild pointers), инициализацияланбаған меңзерлер (uninitialized pointers) деп те аталады, кейбір бағдарламалау тілдерінде мүмкін болатын белгілі бір күйге бастау алдында меңзер қолданылған кезде пайда болады. Олар аспаптық меңзерлер сияқты бейімсіз мінез-құлықты көрсетеді, бірақ олар байқалмай қалу ықтималдығы аз, өйткені көптеген компиляторлар, егер бастапқыда ашылғанда мәлімделген айнымалыларға қол жеткізілсе, компиляция кезінде ескертуді шығарады.

Ұсталған бетті қолмен ауыстыру

Антони Кречмар [pl] (1945–1996) аспалы сілтеме құбылысы болмайтын толық нысанды басқару жүйесін жасады. Фишер мен ЛеБланк осыған ұқсас тәсілді "Құлыптар мен кілттер" деген атпен ұсынды.

Ұсталған көрсеткіштермен қамтамасыз ету тесіктері

Буферлік ағып кету сияқты, ілгерілейтін/жабайы көрсеткіштердегі қателер жиі қауіпсіздікке қауіп тудырады. Мысалы, егер көрсеткіш виртуалды функцияны шақыру үшін қолданылса, vtable көрсеткіші жазылып алынса, басқа мекенжай (мүмкін, зиянды кодқа сілтеме) шақырылуы мүмкін. Басқа жағдайда, егер көрсеткіш жадқа жазу үшін қолданылса, басқа дерек құрылымы бұзылуы мүмкін. Жады тек көрсеткіш ілгерілегеннен кейін оқылса да, бұл ақпараттың құпиялылығын бұзуға (егер қызықты деректер сол жерге орналастырылған келесі құрылымда болса) немесе құқықтарды арттыруға (егер бұрынғы жарамсыз жад қауіпсіздік тексерулерінде қолданылса) әкелуі мүмкін. Босатылғаннан кейін жаңа жад бөлігі берілмей, ілгерілейтін көрсеткіш қолданылса, бұл "босатылғаннан кейін қолдану" осалдығы деп аталады. Мысалы, Microsoft Internet Explorer 6-11 нұсқаларындағы босатылғаннан кейін қолдану осалдығын пайдаланып, күндізгі шабуылдар жасап жатқан озық тұрақты қауіп бар.