|
Тема
|
Проблем при обработка на файлове.
|
|
Автор | acidmax (Нерегистриран) |
Публикувано | 29.12.02 16:58 |
|
Здравейте колеги.
Имам нужда от помощ за един проблем.
Имам файл users.ini, съдържащ на всеки ред:
потребител:парола:права
Имам също един Perl CGI скрипт, който получава от потребителя: потребител ($cgiuser), парола($cgipass) и нова парола($NewPassword).
След като сплитне файла със split (':') и присвои потребител, парола и права съответно на $user,$pass и $access, проверява дали $NewPassword е между 1 и 32 символа, и където ($cgipass = $pass) & ($cgiuser = $user) прави:
-------------------------------
`perl -p -i.old -e "s/$user:$pass:$access/$user:$NewPassword:$access/" users.ini`;
-------------------------------
Дотук всичко е ясно и върви добре. Но забелязах, че понякога информацията в целия файл се разбърква когато някой си смени паролата. Примерно става следното:
----------------------
потребител:парола
:права:потребител1:парола1:права1
потребител2:парола2
:права2:потребител3:парола3:права3
и така нататък...
----------------------
Препологам че $NewPassword е съдържал някакви специални символи, които са объркали действията на заместването.
Моля ви да ми предложите начин за проверката им. Също така ако виждате някакви грешки или знаете по-добър начин да направя това, което ви описах, ще помоля за Вашето съдействие.
Благодаря ви предварително.
| |
Тема
|
Re: Проблем при обработка на файлове.
[re: acidmax]
|
|
Автор | :P (Нерегистриран) |
Публикувано | 30.12.02 18:28 |
|
здравей
и аз мисля че новата парола е имала някакви символи които са ти разбъркали нещата.
и според мен има някои неща които ще е по-добре да оправиш.
например не мисля че 'perl -e ....' е подходящо в случая.
също така ако някъде в тази нова парола има : направо ти съсипва всичко.
и една парола не трябва да е минимум 1 символ, а например поне 5.
за обработката на файла може би е по-добре нещо като:
open F, users.ini or die $!; #ReadOnly
@array = <F>;
close F;
### всеки елемент на @array ти е ред от файла, т.е. user:pass:permissions
s/^\Q$user:$pass:$access\E/$user:$NewPassword:$access/ foreach @array;
ако си намерил usera с тази парола, заместил си каквото трябва
и само записваш масива, независимо променен или не отново във файла.
open F, "> users.ini" or die $!;
print F @array; ### тук внимавай евентуално с новите редове, \n
close F;
субституцията която правиш ми изглежда ОК, но май ще е по-добре с нещата които съм добавил:
^ - начало
\Q и \E - това премахва специалните означения които евентуално има в някоя променлива
Но пак остават проблемите с : и \n защото
потребител:парола
:права:потребител1:парола1:права1
това след потребител:парола си е чист нов ред, т.е. \n
ако можеш по-добре използвай база данни за това нещо, много по-сигурно и удобно е.
и това което съм написал има да се оправя, например не можеш да си сигурен че си намерил user с такава парола и си направил заместването, ...
обикновенно user името се състои само от символи за дума, $user =~ /^\w+$/ or "Incorrect user name";
а и за паролата има някакви подобни ограничения, най-малкото ти можеш да си създадеш такива, например в парола да не се съдържа символа : (тоя разделител най-добре го промени да не е това)
надявам се да съм ти помогнал с нещо от тия писания.
| |
Тема
|
Re: Проблем при обработка на файлове.
[re: :P]
|
|
Автор | acidmax (Нерегистриран) |
Публикувано | 30.12.02 19:25 |
|
Благодаря ти много за отговора.
Реших да последвам препоръката ти и ще се прехвърля на база данни.
Все пак, твоят метод работи , но базата данни е определено по-добра идея. Поне ще се повиши сигурността.
Благодаря много!
| |
Тема
|
Re: Проблем при обработка на файлове.
[re: acidmax]
|
|
Автор |
onzi (онзи) |
Публикувано | 31.12.02 15:44 |
|
дали ще се повиши сигурността - божа работа. ама при всички положения ще имаш още едно нещо, за което да се притесняваш - дб енджина ти дали работи или не. щото ако ти се крашне дейтабейса - заминава си всичко.
пък текстовия файл - парс-ваш го и си пееш
или цялата хава става нещо като 'защо просто, като може и сложно'
TANSTAAFL! There AiNt Such Thing As A Free Lunch
| |
Тема
|
Re: Проблем при обработка на файлове.
[re: onzi]
|
|
Автор | acidmax (Нерегистриран) |
Публикувано | 01.01.03 17:16 |
|
Досега не ми се е крашвал MySQL-a да чукна на дърво
| |
Тема
|
Re: Проблем при обработка на файлове.
[re: acidmax]
|
|
Автор |
onzi (онзи) |
Публикувано | 03.01.03 18:16 |
|
чнг
както са казали старите хора - всяко нещо си има първи път
TANSTAAFL! There AiNt Such Thing As A Free Lunch
| |
|
|
|
|