tobotras: (Default)
[personal profile] tobotras
Объясните мне, почему System.console().readLine() возвращает String, а readPassword() -- char[]?

Date: 2013-07-03 07:13 am (UTC)
From: [identity profile] raydac.livejournal.com
вполне может быть что как раз пытались сделать так что бы readPassword было бы гарантированно не перепутать с readLine

Date: 2013-07-03 08:55 am (UTC)
From: [identity profile] raydac.livejournal.com
там имхо какая то лажа, "массив на стеке" в Java это жесть.. на стеке будет лежать указатель на массив в хипе и этот объект в хипе, разве что действительно что бы меньше было возможностей для хака, а может быть этот метод реализован явой как интринсик, но чем легковеснее конечно тем быстре сотрется
Edited Date: 2013-07-03 08:56 am (UTC)

Date: 2013-07-03 03:06 pm (UTC)
From: [identity profile] ktotam.livejournal.com
речь о том, что массив, в отличие от строки, можно вручную затереть нолями, когда он больше не нужен.

Date: 2013-07-03 03:11 pm (UTC)
From: [identity profile] raydac.livejournal.com
тоже верно
p.s.
при текущей кешируемости процов, надо тогда не забыть еще обеспецить гарантию что наши нули дошли до места и не только в нашем потоке видны ))

Date: 2013-07-03 07:16 am (UTC)
From: [identity profile] alxt.livejournal.com
Потому что char[] будет на стеке и быстро затрётся данными. А String может прожить в памяти, до сборки мусора, неопределённое время.
А вдруг там какая-нибудь хакерская приблуда? Вот для уменьшение времени жизни пароля его в char[] и хранят везде.

PS: может и паранойя авторов.

PPS: я в клиенте jboss7 без хранения пароля в String не обойтись никак...

Date: 2013-07-03 07:35 am (UTC)
From: [identity profile] alxt.livejournal.com
> Ну, он точно будет в куче, а не на стеке.

Если переменная локальная- то на стеке.
Если переменная класса- то да, в куче. Но типа сам виноват, если что :)

Date: 2013-07-03 07:58 am (UTC)
From: [identity profile] alxt.livejournal.com
Я прогнал, прошу прощения. Массив будет хранится на стеке только если он не передаётся никуда (в т.ч. return). Т.е. в даннм случае будет в куче. Остаётся- да, зачистка массива (которая возможно, в отличии от).

Date: 2013-07-03 08:15 am (UTC)
From: [identity profile] deadmustdie.livejournal.com
man 3 alloca
Но результат будет малоприятен для применяющего, это да...

Date: 2013-07-03 09:39 am (UTC)
From: [identity profile] lispnik.livejournal.com
Ну так alloca и нужен для данных, которые не собираешься возвращать. :)

Date: 2013-07-03 07:26 am (UTC)
From: [identity profile] ktotam.livejournal.com
потому что String -- immutable, а массив можно затереть, когда он больше не нужен.

Date: 2013-07-03 07:35 am (UTC)
From: [identity profile] ktotam.livejournal.com
javadoc как всегда все честно говорит

Security note: If an application needs to read a password or other secure data, it should use readPassword() or readPassword(String, Object...) and manually zero the returned character array after processing to minimize the lifetime of sensitive data in memory.

Date: 2013-07-03 03:10 pm (UTC)
From: [identity profile] ktotam.livejournal.com
о. а вот и вопрос для интервью )

Date: 2013-07-03 03:12 pm (UTC)
From: [identity profile] raydac.livejournal.com
можно хакнуть String и затереть в нем )))

Profile

tobotras: (Default)
tobotras

December 2024

S M T W T F S
123 4567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 12th, 2026 05:50 pm
Powered by Dreamwidth Studios