Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: rat в Nov 03, 2005, 10:35



Титла: WML и специални символи
Публикувано от: rat в 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).
Идеи някакви ?  ;)


Титла: WML и специални символи
Публикувано от: VladSun в Nov 03, 2005, 10:54
Не ти давам конкретно решение, но искам да ти кажа, че разрешаването/използването на специални символи в такива полета не е добре по отношение на сигурността - просто укажи, че паролата/потребителя може да е съставен само от стандартните символи (_,-,0-9, az, AZ)


Титла: WML и специални символи
Публикувано от: Hapkoc в Nov 03, 2005, 12:25
VladSun, кое точно по отношение на сигурността обуславя специалните символи като неподходящи за използване в парола?


Титла: WML и специални символи
Публикувано от: CaBA в Nov 03, 2005, 13:58
Цитат
разрешаването/използването на специални символи в такива полета не е добре по отношение на сигурността - просто укажи, че паролата/потребителя може да е съставен само от стандартните символи (_,-,0-9, az, AZ)
Може би също така е добре да я ограничим до 8 символа? Подобно изказване не е просто тъпо, то е опасно! Защо изобщо е необходимо да се ползва парола, която може да се разбие за часове от първото скрипт киди?

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


Титла: WML и специални символи
Публикувано от: rat в Nov 03, 2005, 15:08
CaBA :
1.Както съм посочил в поста , вече опитах с този подход.
2.Кое и е зле на постановката ? По принцип това е само тестов скрипт.Единственото което е кофти е метода. Мога да го сложа да e POST а не  GET.


Титла: WML и специални символи
Публикувано от: CaBA в 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, виж кой отговоря за обработката на заявките и му издърпай ушите. Успех!


Титла: WML и специални символи
Публикувано от: rat в 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 броузъри кодират правилно.


Титла: WML и специални символи
Публикувано от: CaBA в Nov 03, 2005, 19:32
Щом WAP емулатора е виновен, сменяй го! Просто търсене във freshmeat дава този - http://freshmeat.net/projects/mobilizer/ , но съм сигурен, че има още.