Автор Тема: WML и специални символи  (Прочетена 1981 пъти)

rat

  • Напреднали
  • *****
  • Публикации: 266
    • Профил
WML и специални символи
« -: Nov 03, 2005, 10:35 »
Здравейте,
Имам следната ситуация :
Имам проста логин форма на WML с потребителско име и парола.
Формичката се събмитва към друг скрипт :
Примерен код
<wml>
<card title="Login">

<p>
Username: <input name="username" size="15"/><br/>
Password:  <input name="password" size="15"/>
<anchor>
  Login
    <go href="http://192.168.1.12/loginwml.php?username=$(username)&amp;password=$(password)">
  </go>
 </anchor>
</p>

</card>

</wml>

Проблема е че ако в името или паролата се съдържа амперсант(&amp;) , в другия скрипт получавам данните без този символ.Опитах да заместя & с &amp; ... без успех .
Опитах и с urlencode() - пак нищо (даже по-зле щото гърми wml-to).
Идеи някакви ?  '<img'>

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
WML и специални символи
« Отговор #1 -: Nov 03, 2005, 10:54 »
Не ти давам конкретно решение, но искам да ти кажа, че разрешаването/използването на специални символи в такива полета не е добре по отношение на сигурността - просто укажи, че паролата/потребителя може да е съставен само от стандартните символи (_,-,0-9, az, AZ)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
WML и специални символи
« Отговор #2 -: Nov 03, 2005, 12:25 »
VladSun, кое точно по отношение на сигурността обуславя специалните символи като неподходящи за използване в парола?
Активен

CaBA

  • Напреднали
  • *****
  • Публикации: 303
    • Профил
    • WWW
WML и специални символи
« Отговор #3 -: Nov 03, 2005, 13:58 »
Цитат
разрешаването/използването на специални символи в такива полета не е добре по отношение на сигурността - просто укажи, че паролата/потребителя може да е съставен само от стандартните символи (_,-,0-9, az, AZ)
Може би също така е добре да я ограничим до 8 символа? Подобно изказване не е просто тъпо, то е опасно! Защо изобщо е необходимо да се ползва парола, която може да се разбие за часове от първото скрипт киди?

Колкото до проблема - в твоята постановка (която е зле) трябва да замениш всеки амперсанд в паролата с
Примерен код
&amp;&amp;
Активен

10 години ябълкова диета стигат, стигат!

rat

  • Напреднали
  • *****
  • Публикации: 266
    • Профил
WML и специални символи
« Отговор #4 -: Nov 03, 2005, 15:08 »
CaBA :
1.Както съм посочил в поста , вече опитах с този подход.
2.Кое и е зле на постановката ? По принцип това е само тестов скрипт.Единственото което е кофти е метода. Мога да го сложа да e POST а не  GET.

CaBA

  • Напреднали
  • *****
  • Публикации: 303
    • Профил
    • WWW
WML и специални символи
« Отговор #5 -: Nov 03, 2005, 17:21 »
Отхвърляне на отговорност: не съм специалист във WAP/WML, само хвърлих едно око на спецификацията.
Първо да обясня как се изпращат заявките в HTTP/HTML модела (поне това ми се струва, че  разбирам), за да имаме база за сравнение. Нека разгледаме следната форма
Примерен код
<form method="get" action="login">
   <input name="username" type="text"/>
   <input name="password" type="password"/>
   <input name="Гази!" type="submit"/>
</form>

която потребителят е попълнил име bay.blagoy и парола sof&stroy. Когато потребителя натисне бутона "гази!" Браузърът трябва да изпрати подобна на следната HTTP заявка:
Примерен код
GET /login?username=bay.blagoy&username=sof%26stroy&submit=%D0%B3%D0%B0%D0%B7%D0%B8%21
Забележи, че амперсанда в паролата и стойността на submit бутона са УРИ-кодирани (защо - виж RFC2396, секция 2.2). Уеб сървърът извиква външната програма login, като УРИ-декодира стойностите на параметрите и ги предава като аргументи. Вижда се, че има две места, където постата може да се издъни:
1) браузърът не кодира правилно заявката
2) сървърът не декодира правилно заявката и предава странни параметри на програмата за изпълнение

За да разбереш къде е заровено кучето ти предлагам първо да разгледаш изходящия трафик от браузъра (примерно със снифер или в access лога на сървъра, ако има такъв). Ако той е кодиран според изискванията на RFC2396, както настоява  спецификацията на WML, виж кой отговоря за обработката на заявките и му издърпай ушите. Успех!
Активен

10 години ябълкова диета стигат, стигат!

rat

  • Напреднали
  • *****
  • Публикации: 266
    • Профил
WML и специални символи
« Отговор #6 -: Nov 03, 2005, 18:35 »
Мерси . Мисля че проблема в точно в броузера. Това е един WAP емулатор, който явно не кодира правилно заявката.В аксес лога виждам следното:
Примерен код
GET /loginwml.php?username=erftger&password=4rgb& HTTP/1.1" 200 277 "-" "M3Gate/0.6"

Както се вижда не е ури кодирал последния символ който е част от паролата.
Проблема е че не знам как да кодирам ръчно стринга от паролата или юзърнейма при положение че променливите в WML  се достъпват по този начин :
Примерен код
$(pass)

Тоест нямам достъп до тази променлива в PHP...
Остава ми само да се надявам че нормалните WAP броузъри кодират правилно.

CaBA

  • Напреднали
  • *****
  • Публикации: 303
    • Профил
    • WWW
WML и специални символи
« Отговор #7 -: Nov 03, 2005, 19:32 »
Щом WAP емулатора е виновен, сменяй го! Просто търсене във freshmeat дава този - http://freshmeat.net/projects/mobilizer/ , но съм сигурен, че има още.
Активен

10 години ябълкова диета стигат, стигат!