http://www.viruswoman.com/us/index.php
Кът на програмиста...
Moderator: Moridin
Интересно ми е дали е така кръстено, защото е насочено към предимно мъжка аудитория или просто е рекламен тъпизъм.
http://www.viruswoman.com/us/index.php
http://www.viruswoman.com/us/index.php
„Dim dam talélam vacarme
S'en va dans Lumi éternam
Et Gustave dôme guardéam
Dilim dili lili lam
Lutece séra
Dolilom séram
Dim dim dam dada dim dim da dada dim da lilam
Dim dim dam dada dim dim da dada dam di didam”
S'en va dans Lumi éternam
Et Gustave dôme guardéam
Dilim dili lili lam
Lutece séra
Dolilom séram
Dim dim dam dada dim dim da dada dim da lilam
Dim dim dam dada dim dim da dada dam di didam”
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Мдаааа... MySQL-ски потребители, или "тука има, тука нема!" 
Поредният случай, в който се убеждавам, че не трябва да разрешавам на близките си приятели да ползват тази бледа имитация на сървър за бази данни
Днес в един момент установих, че на един от сървърите ми има база данни, към която има потребител, на когото НЕ МОГА да сменя паролата, защото MySQL сървърът НЕ ГО НАМИРА в списъка си от акаунти 
Такааа... започваме сесията:
Я да видим какво мисли сървърът за потребителя "testowa" (уф, не питайте, имаме си и ние едни програмисти и едни QA-и, не си е работа
)...
Следващите две-три заявки може да ви се видят малко странни ("откъде ли пък му хрумна да прави *такива* неща?"), но потърпете, смисъл има
Я да видим все пак *точно* откъде може да се върже някой с този акаунт?
...тогава...
...тогава КАКВО, ПО ДЯВОЛИТЕ, ЗНАЧИ ТОВА?!


И, да, заявката, от която тръгна всичко:
:< 
Ами... това беше. Сървърът си играе с акаунтите на "тука има, тука нема". И, да, ако се чудите, този акаунт *може* да се свърже със сървъра с досегашната си парола. И, не, НЕ МОЖАХ да пресъздам такава ситуация с новосъздадена база и нов акаунт за нея. Нямам представа точно как се е стигнало дотук, но самият факт, че *може* да се стигне до ситуация, в която потребител може да се свърже със сървъра, а администраторът НЕ МОЖЕ да му смени паролата... ами, как да ви кажа, не ми харесва
И, да, знам, че мога да направя някоя щуротия като "UPDATE mysql.user SET `Password` = PASSWORD('foo') WHERE User = 'testowa' AND Host LIKE '_'; FLUSH PRIVILEGES;"... ама... как да ви кажа... ЗАЩО Е НУЖНО?!
Поредният случай, в който се убеждавам, че не трябва да разрешавам на близките си приятели да ползват тази бледа имитация на сървър за бази данни
Такааа... започваме сесията:
Ако някой се интересува, ето пълните настройки на сървъра:roam's console wrote:Script started on Fri Jun 13 23:08:38 2008
Setting up interactive shell params..
[roam@straylight ~]$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.0.51a FreeBSD port: mysql-server-5.0.51a
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
- Spoiler: show
Аааа-ха. Значи ако има акаунт "testowa", той има право да си играе с две от базите. Я да видим имаме ли изобщо такъв акаунт? (в спойлер, че редът със заглавието е малко дългичък)The MySQL server wrote:mysql> SHOW GRANTS FOR 'testowa'@'%';
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for testowa@% |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testowa'@'%' IDENTIFIED BY PASSWORD '18a2f9611fa3f604' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON `vily`.* TO 'testowa'@'%' |
+-------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
- Spoiler: show
Следващите две-три заявки може да ви се видят малко странни ("откъде ли пък му хрумна да прави *такива* неща?"), но потърпете, смисъл има
"Aaaaand now, ladies and gentlemen, the moment you've all been waiting for!" В таблицата mysql.user има ред, в който User = "testowa", и за този ред изразът Host = "%" има стойност 1, демек верно, истина ти казвам! И тогава...The MySQL server wrote:mysql> SELECT Host, User FROM mysql.user WHERE User = 'testowa';
+------+---------+
| Host | User |
+------+---------+
| % | testowa |
+------+---------+
1 row in set (0.00 sec)
mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa';
+------------+---------+
| Host = '%' | User |
+------------+---------+
| 1 | testowa |
+------------+---------+
1 row in set (0.00 sec)
...тогава...
...тогава КАКВО, ПО ДЯВОЛИТЕ, ЗНАЧИ ТОВА?!
The MySQL server wrote:mysql> SELECT Host = '%', User FROM mysql.user WHERE User = 'testowa' AND Host = '%';
Empty set (0.00 sec)
И, да, заявката, от която тръгна всичко:
The MySQL server wrote:mysql> SET PASSWORD FOR 'testowa'@'%' = PASSWORD('foo');
ERROR 1133 (42000): Can't find any matching row in the user table
Ами... това беше. Сървърът си играе с акаунтите на "тука има, тука нема". И, да, ако се чудите, този акаунт *може* да се свърже със сървъра с досегашната си парола. И, не, НЕ МОЖАХ да пресъздам такава ситуация с новосъздадена база и нов акаунт за нея. Нямам представа точно как се е стигнало дотук, но самият факт, че *може* да се стигне до ситуация, в която потребител може да се свърже със сървъра, а администраторът НЕ МОЖЕ да му смени паролата... ами, как да ви кажа, не ми харесва
И, да, знам, че мога да направя някоя щуротия като "UPDATE mysql.user SET `Password` = PASSWORD('foo') WHERE User = 'testowa' AND Host LIKE '_'; FLUSH PRIVILEGES;"... ама... как да ви кажа... ЗАЩО Е НУЖНО?!
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
- Moridin
- Global Moderator
- Posts: 19290
- Joined: Fri Dec 19, 2003 10:21 pm
- Location: On the other side
- Contact:
Хм, дали причината не е, че по някакви неведоми съображения mysql смята точно ТОЗИ конкретен знак (%) за нещо специално при сравненията на стрингове, дори когато не е с LIKE? В смисъл.. по един начин да го смята при булевата оценка и по друг при изключването на редове, знам ли.
Иначе забавно индийд
Иначе забавно индийд
This is it. Ground zero.
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Всъщност ситуацията в крайна сметка беше още по-забавна, свързана и с леко неверни данни върху диска заради не-съвсем-добре преминала проверка на файловите системи след идиотско изпълнение с UPS-и
(мня, това не беше в големия datacenter на TPN, там само едно изпълнение с UPS-и са имали миналата година, ама още държи влага на всички, които си го спомнят
) Та в крайна сметка MySQL сървърът не е по-черен от дявола, не само той е виновен, ама... като са му в ненормално състояние базите, като има несъответствия в рамките и на една-единствена таблица в системната схема, той що изобщо пали бре?... Грррррф.
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
Бтв - нали знаеш че % не включва localhost, както в безкрайната си мъдрост са го решили господата от MySQL ?
А с това се забавлявам последните 2-3 дни ... Пича рути
http://linuxhaters.blogspot.com/
Днес ми е рекорд за годината - 4 хилки код
А се оказа че симпатягите от моно заради малоумния GC който използват той не работи добре когато се създават много бързо много малки обеки - крашва като стой та гледай с фрагментран heap. Разбира се под .NET такива проблеми няма. Крайния резултат - брой си нишките внимателно при асинхронно IO. Май го закрепих ама е гнуслярщина ...
А с това се забавлявам последните 2-3 дни ... Пича рути
http://linuxhaters.blogspot.com/
Днес ми е рекорд за годината - 4 хилки код
А се оказа че симпатягите от моно заради малоумния GC който използват той не работи добре когато се създават много бързо много малки обеки - крашва като стой та гледай с фрагментран heap. Разбира се под .NET такива проблеми няма. Крайния резултат - брой си нишките внимателно при асинхронно IO. Май го закрепих ама е гнуслярщина ...
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.
Този блог кефи, ако и да съм по-скоро от групата на Линукс феновете. Донякъде пича дразни, прекалено е брутален и много простее, но май разните върли фенбойчета са си заслужили това отношение. Иначе определено има мнения за простотиите в Линукс, с които съм мнооого съгласен.
Elves dig rocket launchers.
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Мдаааа... изтрещял съм. Току-що установих, че преди три часа съм написал следните редове код:
(ако не ви се виждат твърде странни, пребройте променливите, които ползвам за индексиране на циклите...)
В моя защита държа да отбележа, че горните две парчета код бяха написани в градинка до автосервиз, и че упоритото рециклиране и пестене на променливи вероятно ми е било внушено от рошавата немска овчарка, която пазеше дворчето на сервиза и се правеше, че не ми обръща внимание!
Code: Select all
for (i = 0; i < wrapcnt; i++)
if (...)
break;
if (i == wrapcnt)
err(...);
...
...
for (i = 0; i < wrap[i].argcnt; i++)
nargv[i + 1] = wrap[i].args[i];В моя защита държа да отбележа, че горните две парчета код бяха написани в градинка до автосервиз, и че упоритото рециклиране и пестене на променливи вероятно ми е било внушено от рошавата немска овчарка, която пазеше дворчето на сервиза и се правеше, че не ми обръща внимание!
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
Текста който форума на бард ми върна преди малко
Изкушавам се да напиша като коментар TRUNCATE TABLE book_comments;.ERROR:
SQL: SELECT COUNT(*) AS cnt FROM book_comments WHERE name = 'Daniel' AND city = 'София' AND email = '' AND comment = 'Не знам Бароу дали обича константата на финната структутра или просто и го казва за да я вкара в кревата, но цикли основно за нея през цялата книга. Както и за антропния прицип. Интересна е несъмнено, но като цяло новата информация в нея е малко, но е по-сложна от entry level книга. Цели се в някаква много странна ниша от читатели.' AND errors = '
допуска се само текст на кирилица!' AND dateposted = '2008-06-18' AND bid = '1086' AND approved = 'Y'
Unknown column 'errors' in 'where clause'
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Е, сега, това не ми прилича на SQL injection
По-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!" 
(мдам, усмивката е крива, защото горното е донякъде от личен опит
)
(мдам, усмивката е крива, защото горното е донякъде от личен опит
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
А моя емпиричен показва, че сайтове които връщат като грешка части от SQL заявките си, обикновенно не са много добре защитени и от SQL injection. Да двете нямат нищо общо, но ... . Пък и става дума за бард ...Roamer wrote:Е, сега, това не ми прилича на SQL injectionПо-скоро е просто неправилно протекъл процес на обновяване на работещо приложение - "дай новия сорс... мдам, дай новия сорс... мдам, и тука новия сорс... ааааа, ма то и промени в базата ли имало?! Уф, добре че са тия клиенти, че да ни подсетят!"
(мдам, усмивката е крива, защото горното е донякъде от личен опит)
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.
Термита да постне какво е открил в проекта си днес 
inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:
при един от случаите имаше коментар: "do not use else if in this method if you value your life" 
inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:
Code: Select all
if (блахблах > нещоси) {
направи нещо
} else {
направи същото нещо от if частта
}
Scalpel. Sponge. Magic Wand!
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
Е не е готино. Виж ако беше if(true) :0thunder wrote:Термита да постне какво е открил в проекта си днес
inspire-нат от него аз се поразрових из нашия днес и на 4 места открих код от вида:
при един от случаите имаше коментар: "do not use else if in this method if you value your life"Code: Select all
if (блахблах > нещоси) { направи нещо } else { направи същото нещо от if частта }
The sinking of the Titanic was a miracle to the lobsters in the ship's kitchen.
Мдаа, това си заслужава пускането. В интерес на истината говорих с колегата, който го е писал, и наистина се налага да е така. Така че това е WTF на ниво дизайн, над който за съжаление колегата не е имал контрол, но все пак си струва да се види.
Behold the power of Java!
public class ControlFrameView extends Canvas implements FocusListener, PaintListener, IPropertyChangeListener,
MouseListener, SelectionListener, DisposeListener, ICopyAction, ICutAction, IDeleteAction, IRenameAction,
IMoveToPasteboardAction, ISaveAsTemplateAction, IConvertToCopyAction, IConvertToCrossReferenceAction,
IInsertNoteAction, IEditNoteAction, IDeleteNoteAction, IMarkAsDoneAction, IObjectListener, MetaDataListener {
Behold the power of Java!
public class ControlFrameView extends Canvas implements FocusListener, PaintListener, IPropertyChangeListener,
MouseListener, SelectionListener, DisposeListener, ICopyAction, ICutAction, IDeleteAction, IRenameAction,
IMoveToPasteboardAction, ISaveAsTemplateAction, IConvertToCopyAction, IConvertToCrossReferenceAction,
IInsertNoteAction, IEditNoteAction, IDeleteNoteAction, IMarkAsDoneAction, IObjectListener, MetaDataListener {
Elves dig rocket launchers.
Who is online
Users browsing this forum: Semrush [Bot] and 3 guests
