Skip to content

Category: programmingSyndicate content

C, PHP, VB, .NET

 INTERSECT и ЕXCEPT в MySQL

   от C, PHP, VB, .NET


В теорията на релационните бази от данни се използват често основните операции върху множества. Досега не сме ги разглеждали в теоретичен план, а ги използвахме чисто интуитивно. Сега отново няма да се задълбочаваме във формализъм, а ще погледнем нещата от практична гледна точка, като естествено ще поставим основния акцент върху реализацията на операциите в MySQL.

1. Обединение на множества:

Ако имаме множествата A = {1, 2, 3} и B = {2, 3, 4}, то тяхното обединение е множеството {1, 2, 3, 4}. За реализация на обединение в MySQL, темата е разгледана с примери в статията за UNION и UNION ALL и по-точно с конкретна реализация в статията FULL JOIN в MySQL.

2. Сечение на множества

 

Иван Ванков

 WordPress е податлив на XSS

   от Иван Ванков


Играя си с един проект, и естествено решавам да го ударя. За под 1 минута успявам да направя XSS атака, при това брутална. Хем се радвам, че успях, хем се дразня, понеже кода на проекта е мой. Но както и да е.
Реших да споделя как точно тествах за XSS атака, и докато писах тази статия се оказа, че WordPress е брутално податлив на XSS.
Тръгнах да търся някое разширение за xss, нали все пак е WordPress, всичко там е разширения, но от 5-те които тествах нито едно не помогна.

Накратко, ако искате да проверите дали сайта ви е податлив на XSS изтеглете текстовия файл по-долу и пуснете съдържанието му в някое поле за коментар (или каквото там има сайта ви) Ако видите предупреждение с текста XSS, или браузъра тръгне да ви сваля файл автоматично, значи имате МНОГО голям проблем. Това означава, че може да се изпълнява произволен JS код от коментар на потребител, което автоматично значи, че някой ще намери начин да експлоатира тази дупка.

 

C, PHP, VB, .NET

В тази статия ще покажем съвсем елементарна форма за captcha. Първо ще започнем с файл „captcha.php“, в който се прави следното:

  • Генерира произволен текст от 8 символа и ги записва в сесията;
  • Генерира картинка от тип PNG с този текст и я изпраща на потребителя.

captcha.php:

 

C, PHP, VB, .NET

В предишните примери, в които показвахме автентикация с cookie, ние записвахме името и паролата в това cookie. Основен проблем на първоначалното решение беше, че ги записвахме като най-обикновен текст. В този случай хакер може да открадне бисквитката и моментално да разбере името и паролата на човека. Първоначалното решение на проблема, което предложихме, беше да се криптират със симетричен алгоритъм за криптиране (напр. aes256-cbc) с много дълъг (хардкоднат в приложението ни, или пък защо не – записан в базата от данни и различен за всеки клиент) ключ. В тази статия ще покажем една изцяло различна концепция – няма да записваме име и парола в бисквитката, а вместо това ще записваме уникален token в базата от данни, с който ще автентикираме потребителите.

 

C, PHP, VB, .NET

 Упражнение 2, 2015

   от C, PHP, VB, .NET


В това упражнение показваме login форма. Паролите са хеширани със salt (уникален ключ за всеки потребител в базата) и pepper (един общ salt в кода).

База от данни – мястото, където ще записваме потребителските имена и пароли. Създаваме си уникален потребител специално за login формата.

CREATE DATABASE upr2;
USE upr2

CREATE TABLE users(
 id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 user VARCHAR(64) NOT NULL UNIQUE,
 pass CHAR(96) NOT NULL,
 salt CHAR(96) NOT NULL
);

GRANT SELECT ON upr2.users
TO loginform@localhost
IDENTIFIED BY 'fghjudighfduishgiufdsw';

passgen.php – използвайте този скрипт, за да си генерирате insert заявки за вмъкване на потребители в базата данни

 

Иван Ванков

 Какво следва след Youtube?

   от Иван Ванков


Не, youtube няма да умира, поне не следващите няколко години, но youtube напоследък има много проблеми. Едни от най-качествените създатели на съдържание започват да се махат от него или да търсят алтернативни начини за печалба. Да, youtube получава 10-15 часа видео всяка минута, но колко от тези видеа имат някаква стойност? Почти нито едно. Ето защо професионалните създатели на съдържание са важни. Но защо бягат? Нали тубата е най-доброто място и се вадят милиони от нея?

 

C, PHP, VB, .NET

В тази статия ще разгледаме статичните методи на клас Stream. Ще покажем и два начина за генериране на безкраен поток – чрез Supplier и чрез метод iterate.

Примерите с код, които ще опишем по-долу се надграждат един-друг. В началото трябва да добавите java.util.function.*, java.util.*, java.text.* и java.util.stream.*.

Stream.builder() създава обект от клас Stream.Builder. Този обект може да акумулира обекти от даден тип и по този начин в последствие да изгражда поток. Методите add и accept добавят елементи (те са напълно еквивалентни), а метод build връща обект от тип Stream.

 

C, PHP, VB, .NET

 Монади с Java 8 Stream

   от C, PHP, VB, .NET


Във функционалното програмиране понятието „монада“ означава изчисление, което се провежда в поредица от стъпки. Това може да са вержини операции или поредица от операции създадена чрез генератори на функции (примери и за двете показахме по-рано). В тази статия ще се фокусираме върху едно от сериозните нововъведения в Java 8 – клас Stream, чрез който могат да се реализират монади върху списъци и масиви. Още в началото трябва да се отбележи, че под „Stream“ нямаме предвид познатите InputStream и OutputStream, а един изцяло нов клас, който се помещава в пакета java.util.stream.

Stream работи поредица от елементи, върху които могат да се прилагат два вида верижни операции:

 

C, PHP, VB, .NET

Ако имаме една функция от няколко входни параметри, която като резултат връща друга функция с по-малко параметри, ще казваме, че имаме „генератор на функции“. Терминът на английски се нарича „currying“ и е важен за функционалното програмиране. Нека разгледаме един пример за генератор на функция, който е написан на по-стара версия на Java (<=7). Нарочно няма да използваме функционалните интерфейси, които са налични в Java 8, а ще си дефинираме сами такъв:

 

C, PHP, VB, .NET

 Шеста нормална форма

   от C, PHP, VB, .NET


Шеста нормална форма (6НФ) е предложена през 1990 г. от Кристофър Дейт с цел да бъдат разрешени проблеми с дублиране на информация при т.нар. „времеви масиви с информация“ (temporal data). Става въпрос за таблици, в които записваме информация за настоящи и предишни варианти на дадени записи. Нека например разгледаме следната таблица:

CREATE TABLE customers(
`id` INT UNSIGNED NOT NULL,
`from` DATE NOT NULL,
`to` DATE NOT NULL,
`phone` VARCHAR(16) NOT NULL,
`address` VARCHAR(255) NOT NULL,
PRIMARY KEY(`id`, `from` , `to`)
);