Ես չկարողացա գտնել անվտանգության կամ դրա բացակայության լավ ամփոփում, երբ օգտագործում եմ Սկաներ հատկապես օգտատիրոջ մուտքագրում խնդրելիս (ի տարբերություն տեքստային ֆայլից կարդալու): Ես գիտեմ, որ C-ում շատ վտանգներ կան օգտատերերի մուտքագրումը կարդալիս, և մենք անընդհատ պետք է զգոն լինենք այնպիսի բաների դեմ, ինչպիսիք են Buffer Overflows-ը:
Մի անգամ ես խոսեցի մեկի հետ, ով ասաց, որ նրանք հեշտությամբ կարող են կոտրել իմ ծրագիրը, եթե ես օգտագործեի Scanner դասը: Այդ պահին ես նրան շատ չսեղմեցի դրա վրա, բայց դա ինձ ստիպեց մտածել. որքա՞ն պաշտպանություն պետք է ներդնեմ օգտատիրոջ մուտքագրումը կարդալիս (Տողեր, ներդիրներ և այլն):
Նա նկատի ուներ հարձակումների տեսակների մի քանի օրինակ. մուտքագրումը չափազանց երկար է, որպեսզի String-ը իրականում պահի (ավելի քան ~2 միլիարդ նիշ և առանց \n), այդպիսով բացառություն առաջացնելով: Թվային արժեքների մուտքագրում, եթե անուն եք խնդրում: Միգուցե նույնիսկ կոտրել սկաները և ստիպել նրան անորոշ վարքագծի ավելի բարդ ձևերով:
Ես մտածում էի սրանից պաշտպանվելու եղանակներից մեկը՝ փորձելով Scanner.nextLine()-ի շուրջը՝ պաշտպանվելու չափազանց երկար մուտքագրումից, կամ գուցե նույնիսկ կարդալով նիշ առ նիշ և համոզվել, որ այն համապատասխանում է ինձ անհրաժեշտին (չնայած ես պարզեցի: hasNext()-ը իրականում չի աշխատում օգտվողի մուտքագրման համար, միայն ֆայլի ընթերցում):
Այն, ինչ ես իսկապես հարցնում եմ, հետևյալն է. ո՞րն է պաշտպանվելու լավագույն միջոցը որևէ մեկից, որը նպատակաուղղված փորձում է կոտրել ձեր Սկաները և առաջացնել Բացառություն կամ «չսահմանված վարքագիծ»: Արդյո՞ք սկաները իսկապես լավագույն գործիքն է դրա համար: Կա՞ն արդյոք այլ դասեր, որոնք դուք նախընտրում եք չարամիտ մարդկանց հիշելիս: