?

Log in

No account? Create an account

Народные явайские песни - Оживший юзерпик

Jul. 3rd, 2013

10:50 am - Народные явайские песни

Previous Entry Share Next Entry

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

Current Mood: dumb

Comments:

[User Picture]
From:raydac
Date:July 3rd, 2013 07:13 am (UTC)
(Link)
вполне может быть что как раз пытались сделать так что бы readPassword было бы гарантированно не перепутать с readLine
(Reply) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 08:51 am (UTC)
(Link)
Нет, см. комментарии ниже.
(Reply) (Parent) (Thread)
[User Picture]
From:raydac
Date:July 3rd, 2013 08:55 am (UTC)
(Link)
там имхо какая то лажа, "массив на стеке" в Java это жесть.. на стеке будет лежать указатель на массив в хипе и этот объект в хипе, разве что действительно что бы меньше было возможностей для хака, а может быть этот метод реализован явой как интринсик, но чем легковеснее конечно тем быстре сотрется

Edited at 2013-07-03 08:56 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:July 3rd, 2013 03:06 pm (UTC)
(Link)
речь о том, что массив, в отличие от строки, можно вручную затереть нолями, когда он больше не нужен.
(Reply) (Parent) (Thread)
[User Picture]
From:raydac
Date:July 3rd, 2013 03:11 pm (UTC)
(Link)
тоже верно
p.s.
при текущей кешируемости процов, надо тогда не забыть еще обеспецить гарантию что наши нули дошли до места и не только в нашем потоке видны ))
(Reply) (Parent) (Thread)
[User Picture]
From:alxt
Date:July 3rd, 2013 07:16 am (UTC)
(Link)
Потому что char[] будет на стеке и быстро затрётся данными. А String может прожить в памяти, до сборки мусора, неопределённое время.
А вдруг там какая-нибудь хакерская приблуда? Вот для уменьшение времени жизни пароля его в char[] и хранят везде.

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

PPS: я в клиенте jboss7 без хранения пароля в String не обойтись никак...
(Reply) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 07:28 am (UTC)
(Link)
Ну, он точно будет в куче, а не на стеке. Но точно -- чтобы стереть побыстрее, однозначно. Спасибо.
(Reply) (Parent) (Thread)
[User Picture]
From:alxt
Date:July 3rd, 2013 07:35 am (UTC)
(Link)
> Ну, он точно будет в куче, а не на стеке.

Если переменная локальная- то на стеке.
Если переменная класса- то да, в куче. Но типа сам виноват, если что :)
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 07:54 am (UTC)
(Link)
Как из функции вернуть массив, лежащий на стеке?
(Reply) (Parent) (Thread)
[User Picture]
From:alxt
Date:July 3rd, 2013 07:58 am (UTC)
(Link)
Я прогнал, прошу прощения. Массив будет хранится на стеке только если он не передаётся никуда (в т.ч. return). Т.е. в даннм случае будет в куче. Остаётся- да, зачистка массива (которая возможно, в отличии от).
(Reply) (Parent) (Thread)
[User Picture]
From:zinal
Date:July 3rd, 2013 08:15 am (UTC)
(Link)
man 3 alloca
Но результат будет малоприятен для применяющего, это да...
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 08:50 am (UTC)
(Link)
Ну, вернуть-то нельзя :)
(Reply) (Parent) (Thread)
[User Picture]
From:lispnik
Date:July 3rd, 2013 09:01 am (UTC)
(Link)
alloca в Java? :)
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 09:34 am (UTC)
(Link)
Да фиг с ним, и на сях массив на стеке вернуть нельзя :)
(Reply) (Parent) (Thread)
[User Picture]
From:lispnik
Date:July 3rd, 2013 09:39 am (UTC)
(Link)
Ну так alloca и нужен для данных, которые не собираешься возвращать. :)
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 10:21 am (UTC)
(Link)
Щас не об этом (c) :-)
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:July 3rd, 2013 07:26 am (UTC)
(Link)
потому что String -- immutable, а массив можно затереть, когда он больше не нужен.
(Reply) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 07:27 am (UTC)
(Link)
А! Точно. Спасибо.
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:July 3rd, 2013 07:35 am (UTC)
(Link)
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.
(Reply) (Parent) (Thread)
[User Picture]
From:tobotras
Date:July 3rd, 2013 07:58 am (UTC)
(Link)
Да-да, я забыл, что String -- immutable, остальное понятно.
(Reply) (Parent) (Thread)
[User Picture]
From:ktotam
Date:July 3rd, 2013 03:10 pm (UTC)
(Link)
о. а вот и вопрос для интервью )
(Reply) (Parent) (Thread)
[User Picture]
From:raydac
Date:July 3rd, 2013 03:12 pm (UTC)
(Link)
можно хакнуть String и затереть в нем )))
(Reply) (Parent) (Thread)