diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index ed2aafc..279b0bf 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -1,6 +1,7 @@ // Контроллер аутентификации const User = require('../models/User'); const jwt = require('jsonwebtoken'); +const profanityFilter = require('../utils/profanityFilter'); // Вспомогательная функция для генерации JWT const generateToken = (id) => { @@ -29,6 +30,12 @@ const registerUser = async (req, res, next) => { throw new Error('Пожалуйста, выберите город.'); } + // Проверка имени на наличие запрещенных слов + if (profanityFilter.hasProfanity(name)) { + res.status(400); + throw new Error('Имя содержит запрещённые слова. Пожалуйста, используйте другое имя.'); + } + // Проверка возраста (минимум 14 лет) const birthDate = new Date(dateOfBirth); const today = new Date(); diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index a520f4b..c29f481 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -2,6 +2,7 @@ const User = require('../models/User'); const cloudinary = require('../config/cloudinaryConfig'); // Импортируем настроенный Cloudinary SDK const path = require('path'); // Может понадобиться для получения расширения файла const ProfileView = require('../models/ProfileView'); +const profanityFilter = require('../utils/profanityFilter'); // Импортируем фильтр запрещённых слов // @desc Обновить профиль пользователя // @route PUT /api/users/profile @@ -15,6 +16,14 @@ const updateUserProfile = async (req, res, next) => { const user = await User.findById(req.user._id); if (user) { + // Проверяем имя на запрещённые слова, если оно было изменено + if (req.body.name && req.body.name !== user.name) { + if (profanityFilter.hasProfanity(req.body.name)) { + res.status(400); + throw new Error('Имя содержит запрещённые слова. Пожалуйста, используйте другое имя.'); + } + } + // Обновляем только те поля, которые пользователь может изменять user.name = req.body.name || user.name; @@ -31,11 +40,13 @@ const updateUserProfile = async (req, res, next) => { user.gender = req.body.gender; } - // Обрабатываем bio, учитывая null и пустые строки - if (req.body.bio === null) { - user.bio = ''; // Устанавливаем пустую строку, если null - } else { - user.bio = req.body.bio || user.bio; + // Проверяем bio на запрещённые слова перед установкой + if (req.body.bio !== undefined && req.body.bio !== null) { + if (req.body.bio !== '' && profanityFilter.hasProfanity(req.body.bio)) { + res.status(400); + throw new Error('Ваша биография содержит запрещённые слова. Пожалуйста, отредактируйте текст.'); + } + user.bio = req.body.bio; } // Обновление местоположения (если передано) diff --git a/backend/package-lock.json b/backend/package-lock.json index cf22af0..7c54194 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "bad-words": "^4.0.0", "bcryptjs": "^3.0.2", "cloudinary": "^2.0.1", "cors": "^2.8.5", @@ -110,6 +111,24 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/bad-words": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bad-words/-/bad-words-4.0.0.tgz", + "integrity": "sha512-fLjG/I0N3I7xhurqGnGitSRD10UeEE63a7hyXtutQDpxo4+Eal+i7veWeZxZJPNtsl6X1mUIoWPwt8gQ7NMQUw==", + "license": "MIT", + "dependencies": { + "badwords-list": "^2.0.1-4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/badwords-list": { + "version": "2.0.1-4", + "resolved": "https://registry.npmjs.org/badwords-list/-/badwords-list-2.0.1-4.tgz", + "integrity": "sha512-FxfZUp7B9yCnesNtFQS9v6PvZdxTYa14Q60JR6vhjdQdWI4naTjJIyx22JzoER8ooeT8SAAKoHLjKfCV7XgYUQ==", + "license": "MIT" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", diff --git a/backend/package.json b/backend/package.json index 2ded69b..1e47039 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,6 +12,7 @@ "license": "ISC", "description": "", "dependencies": { + "bad-words": "^4.0.0", "bcryptjs": "^3.0.2", "cloudinary": "^2.0.1", "cors": "^2.8.5", diff --git a/backend/utils/en.txt b/backend/utils/en.txt new file mode 100644 index 0000000..e6715c7 --- /dev/null +++ b/backend/utils/en.txt @@ -0,0 +1,377 @@ +2g1c +2 girls 1 cup +acrotomophilia +alabama hot pocket +alaskan pipeline +anal +anilingus +anus +apeshit +arsehole +ass +asshole +assmunch +auto erotic +autoerotic +babeland +baby batter +baby juice +ball gag +ball gravy +ball kicking +ball licking +ball sack +ball sucking +bangbros +bareback +barely legal +barenaked +bastard +bastardo +bastinado +bbw +bdsm +beaner +beaners +beaver cleaver +beaver lips +bestiality +big black +big breasts +big knockers +big tits +bimbos +birdlock +bitch +bitches +black cock +blonde action +blonde on blonde action +blowjob +blow job +blow your load +blue waffle +blumpkin +bollocks +bondage +boner +boob +boobs +booty call +brown showers +brunette action +bukkake +bulldyke +bullet vibe +bullshit +bung hole +bunghole +busty +butt +buttcheeks +butthole +camel toe +camgirl +camslut +camwhore +carpet muncher +carpetmuncher +chocolate rosebuds +circlejerk +cleveland steamer +clit +clitoris +clover clamps +clusterfuck +cock +cocks +coprolagnia +coprophilia +cornhole +coon +coons +creampie +cum +cumming +cunnilingus +cunt +darkie +date rape +daterape +deep throat +deepthroat +dendrophilia +dick +dildo +dingleberry +dingleberries +dirty pillows +dirty sanchez +doggie style +doggiestyle +doggy style +doggystyle +dog style +dolcett +domination +dominatrix +dommes +donkey punch +double dong +double penetration +dp action +dry hump +dvda +eat my ass +ecchi +ejaculation +erotic +erotism +escort +eunuch +faggot +fecal +felch +fellatio +feltch +female squirting +femdom +figging +fingerbang +fingering +fisting +foot fetish +footjob +frotting +fuck +fuck buttons +fuckin +fucking +fucktards +fudge packer +fudgepacker +futanari +gang bang +gay sex +genitals +giant cock +girl on +girl on top +girls gone wild +goatcx +goatse +god damn +gokkun +golden shower +goodpoop +goo girl +goregasm +grope +group sex +g-spot +guro +hand job +handjob +hard core +hardcore +hentai +homoerotic +honkey +hooker +hot carl +hot chick +how to kill +how to murder +huge fat +humping +incest +intercourse +jack off +jail bait +jailbait +jelly donut +jerk off +jigaboo +jiggaboo +jiggerboo +jizz +juggs +kike +kinbaku +kinkster +kinky +knobbing +leather restraint +leather straight jacket +lemon party +lolita +lovemaking +make me come +male squirting +masturbate +menage a trois +milf +missionary position +motherfucker +mound of venus +mr hands +muff diver +muffdiving +nambla +nawashi +negro +neonazi +nigga +nigger +nig nog +nimphomania +nipple +nipples +nsfw images +nude +nudity +nympho +nymphomania +octopussy +omorashi +one cup two girls +one guy one jar +orgasm +orgy +paedophile +paki +panties +panty +pedobear +pedophile +pegging +penis +phone sex +piece of shit +pissing +piss pig +pisspig +playboy +pleasure chest +pole smoker +ponyplay +poof +poon +poontang +punany +poop chute +poopchute +porn +porno +pornography +prince albert piercing +pthc +pubes +pussy +queaf +queef +quim +raghead +raging boner +rape +raping +rapist +rectum +reverse cowgirl +rimjob +rimming +rosy palm +rosy palm and her 5 sisters +rusty trombone +sadism +santorum +scat +schlong +scissoring +semen +sex +sexo +sexy +shaved beaver +shaved pussy +shemale +shibari +shit +shitblimp +shitty +shota +shrimping +skeet +slanteye +slut +s&m +smut +snatch +snowballing +sodomize +sodomy +spic +splooge +splooge moose +spooge +spread legs +spunk +strap on +strapon +strappado +strip club +style doggy +suck +sucks +suicide girls +sultry women +swastika +swinger +tainted love +taste my +tea bagging +threesome +throating +tied up +tight white +tit +tits +titties +titty +tongue in a +topless +tosser +towelhead +tranny +tribadism +tub girl +tubgirl +tushy +twat +twink +twinkie +two girls one cup +undressing +upskirt +urethra play +urophilia +vagina +venus mound +vibrator +violet wand +vorarephilia +voyeur +vulva +wank +wetback +wet dream +white power +wrapping men +wrinkled starfish +xx +xxx +yaoi +yellow showers +yiffy +zoophilia +🖕 diff --git a/backend/utils/profanityFilter.js b/backend/utils/profanityFilter.js new file mode 100644 index 0000000..2fbd674 --- /dev/null +++ b/backend/utils/profanityFilter.js @@ -0,0 +1,154 @@ +// Утилита для фильтрации нежелательного контента +const Filter = require('bad-words'); +const fs = require('fs'); +const path = require('path'); + +// Список русских нецензурных слов и других запрещенных слов +const russianBadWords = [ + 'блядь', 'хуй', 'пизда', 'ебать', 'ебал', 'ебло', 'хуесос', 'пидор', 'пидорас', + 'мудак', 'говно', 'залупа', 'хер', 'манда', 'спермоед', 'шлюха', 'соска', 'шалава', + 'дебил', 'дрочить', 'дрочка', 'ебанутый', 'выродок', 'шмара', 'сука', 'членосос', + 'гандон', 'гондон', 'гнида', 'вагина', 'хуи', 'жопа', 'шлюхи', 'проститутка' +]; + +// Список запрещенных слов и фраз для дейтинг-приложения +const datingAppBadWords = [ + 'проститутка', 'интим', 'секс за деньги', 'эскорт', 'интим услуги', + 'заплачу', 'заплати', 'минет', 'массаж с интимом' +]; + +/** + * Загружает список запрещенных слов из файла + * @param {string} filePath - Путь к файлу со списком запрещенных слов + * @return {Array} - Массив запрещенных слов + */ +function loadBadWordsFromFile(filePath) { + try { + if (fs.existsSync(filePath)) { + const content = fs.readFileSync(filePath, 'utf8'); + const words = content.split('\n') + .map(word => word.trim()) + .filter(word => word && !word.startsWith('//') && word.length >= 3); + console.log(`Загружено ${words.length} запрещенных слов из файла ${filePath}`); + return words; + } + } catch (error) { + console.error(`Ошибка при загрузке слов из файла ${filePath}:`, error.message); + } + return []; +} + +class ProfanityFilter { + constructor() { + // Создаем экземпляр фильтра с английскими словами по умолчанию + this.filter = new Filter({ placeHolder: '*' }); + + // Загружаем слова из файлов + const russianFileWords = loadBadWordsFromFile(path.join(__dirname, 'words.txt')); + const englishFileWords = loadBadWordsFromFile(path.join(__dirname, 'en.txt')); + + // Объединяем все источники запрещенных слов + const allBadWords = [ + ...russianBadWords, + ...datingAppBadWords, + ...russianFileWords, + ...englishFileWords + ]; + + // Добавляем все слова в фильтр + this.filter.addWords(...allBadWords); + + // Создаем регулярные выражения для проверки производных слов + this.generateWordPatterns(allBadWords); + + console.log(`Всего загружено ${allBadWords.length} запрещенных слов`); + } + + /** + * Создает регулярные выражения для проверки производных слов + * @param {Array} words - Список базовых запрещённых слов + */ + generateWordPatterns(words) { + this.wordPatterns = words + .filter(word => word && word.length >= 4) // Берем только слова длиннее 3 символов для производных + .map(word => { + // Создаем шаблон для каждого слова: допускает изменение окончаний и вставку символов + const baseWord = word.replace(/[еёо]/g, '[еёо]'); // Учитываем замену е/ё/о + return new RegExp(`\\b${baseWord}[а-яёa-z]*\\b`, 'i'); + }); + } + + /** + * Проверяет, содержит ли текст запрещенные слова или их производные + * @param {string} text - Текст для проверки + * @return {boolean} - true, если текст содержит запрещенные слова, иначе false + */ + hasProfanity(text) { + if (!text) return false; + + // Проверяем сначала стандартным методом библиотеки bad-words + if (this.filter.isProfane(text.toLowerCase())) { + return true; + } + + // Дополнительная проверка на производные слова через регулярные выражения + const normalizedText = text.toLowerCase(); + return this.wordPatterns.some(pattern => pattern.test(normalizedText)); + } + + /** + * Проверяет, содержит ли объект запрещенные слова в указанных полях + * @param {Object} obj - Объект для проверки + * @param {Array} fields - Массив имен полей для проверки + * @return {Object} - Объект с результатами проверки { isProfane: boolean, field: string|null } + */ + validateObject(obj, fields) { + for (const field of fields) { + if (obj[field] && this.hasProfanity(obj[field])) { + return { isProfane: true, field }; + } + } + return { isProfane: false, field: null }; + } + + /** + * Заменяет запрещенные слова в тексте на звездочки + * @param {string} text - Исходный текст + * @return {string} - Очищенный текст + */ + clean(text) { + if (!text) return ''; + + // Сначала используем стандартный метод библиотеки + let cleanedText = this.filter.clean(text); + + // Затем проверяем на производные слова и заменяем их + this.wordPatterns.forEach(pattern => { + cleanedText = cleanedText.replace(pattern, match => '*'.repeat(match.length)); + }); + + return cleanedText; + } + + /** + * Добавляет новое запрещенное слово в фильтр + * @param {string|Array} words - Слово или массив слов для добавления + */ + addWords(words) { + // Добавляем слова в стандартный фильтр + this.filter.addWords(words); + + // Если слова переданы как массив + if (Array.isArray(words)) { + this.generateWordPatterns(words); + } else { + // Если передано одно слово + this.generateWordPatterns([words]); + } + } +} + +// Экспортируем экземпляр фильтра для использования в приложении +const profanityFilter = new ProfanityFilter(); + +module.exports = profanityFilter; \ No newline at end of file diff --git a/backend/utils/words.txt b/backend/utils/words.txt new file mode 100644 index 0000000..07299e8 --- /dev/null +++ b/backend/utils/words.txt @@ -0,0 +1,1317 @@ +анус +аборт +бздун +беспезды +бздюх +бля +блудилище +блядво +блядеха +блядина +блядистка +блядище +блядки +блядование +блядовать +блядовитый +блядовозка +блядолиз +блядоход +блядский +блядство +блядствовать +блядун +блядь +бляди +бляд +блядюга +блядюра +блядюшка +блядюшник +бордель +вагина +вафлист +вжопить +вжопиться +вздрачивание +вздрачивать +вздрачиваться +вздрочить +вздрочиться +вздрючить +вздрючивание +вздрючивать +взъебка +взъебщик +взъебнуть +вислозадая +влагалище +вхуйнуть +вхуйнуться +вхуякать +вхуякаться +вхуя +вхуякивать +вхуякиваться +вхуякнуть +вхуякнуться +вхуяривание +вхуяривать +вхуяриваться +вхуярить +вхуяриться +вхуячивание +вхуячивать +вхуячиваться +вхуячить +вхуячиться +вхуяшивать +вхуяшиваться +вхуяшить +вхуяшиться +въебать +въебаться +въебашивать +въебашиваться +въебашить +въебашиться +въебенивать +въебениваться +въебенить +въебениться +выблядок +выебанный +выебат +выебаться +высрать +высраться +выссать +выссаться +высераться +выссереть +говнецо +говнистый +говниться +говно +говновоз +говнодав +говноеб +говноед +говномес +говномер +говносерка +говнюк +голожопая +гомик +гомосек +гондон +гонорея +давалка +двужопник +дерьмо +дерьмоед +дерьмовый +дилдо +додрочить +додрочиться +доебать +доебаться +доебенивать +доебениваться +доебенить +доебениться +долбоеб +допиздить +допиздиться +допиздовать +допиздоваться +допиздовывать +допиздовываться +допиздохать +допиздохаться +допиздохивать +допиздохиваться +допиздошить +допиздошиться +допиздошивать +допиздошиваться +допиздюлить +допиздюлиться +допиздюливать +допиздюливаться +допиздюрить +допиздюриться +допиздюривать +допиздюриваться +допиздюхать +допиздюхаться +допиздюхивать +допиздюхиваться +допиздякать +допиздякаться +допиздякивать +допиздякиваться +допиздярить +допиздяриться +допиздяривать +допиздяриваться +допиздяхать +допиздяхаться +допиздяхивать +допиздяхиваться +допиздячить +допиздячиться +допиздячивать +допиздячиваться +допиздяшить +допиздяшиться +допиздяшивать +допиздяшиваться +допиздоболивать +допиздоболиваться +допиздоболиться +допиздюкать +допиздюкаться +допиздюкивать +допиздюкиваться +допизживать +дотрахать +дотрахаться +дохуйнуть +дохуякать +дохуякаться +дохуякивать +дохуякиваться +дохуяривать +дохуяриваться +дохуярить +дохуяриться +дохуячить +дохуячиться +дохуячивать +дохуячиваться +дрисня +дристать +дристун +дроченье +дрочилыцик +дрочить +дрочиться +дрочка +дрючить +дрючиться +дурак +дуроеб +выебать +ебало +ебальник +ебальные +ебальный +ебанатик +ебанашка +ебанутый +ебануть +ебануться +ебать +ебат +ебаться +ебатьс +ебитесь +ебло +еблом +еблысь +ебля +ебнуть +ебнуться +ебня +ебучий +заебла +надроченный +объебешь +поебать +жирнозадый +жопа +жопой +жопастая +жопоеб +жопенци +жопища +жопка +жопник +жополиз +жополизание +жопоногий +жопочка +жопочник +жопство +жопу +забздеть +заблядовать +заблядоваться +задница +задрачивать +задрачиваться +задроченный +задрочить +задрочиться +задрючить +задрючиться +заебанный +заебать +заебаться +заебательская +заебашивать +заебашиваться +заебашить +заебашиться +заебенивать +заебениваться +заебенить +заебениться +залупа +залупу +залупаться +залупенить +залупень +залупить +залупляться +залупистый +запиздарить +запизденная +запизденелый +запиздить +запиздиться +запиздоболивать +запиздоболиваться +запиздоболить +запиздоболиться +запиздовать +запиздоваться +запиздовывать +запиздовываться +запиздохать +запиздошить +запиздошиться +запиздошивать +запиздошиваться +запиздюкать +запиздюкаться +запиздюкивать +запиздюкиваться +запиздюлить +запиздюлиться +запиздюливать +запиздюливаться +запиздюрить +запиздюриться +запиздюривать +запиздюриваться +запиздюхать +запиздюхаться +запиздюхивать +запиздюхиваться +запиздючить +запиздючиться +запиздючивать +запиздючиваться +засранец +засранка +засранный +засратый +засрать +засраться +зассать +затраханный +затрахать +затрахаться +затрахивать +затрахиваться +захуить +захуйнуть +захуйнуться +захуякать +захуякаться +захуякивать +захуякиваться +захуярить +захуяриться +захуяривать +захуяриваться +захуячить +захуячиться +захуячивать +захуячиваться +захуяшить +захуяшиться +захуяшивать +захуяшиваться +злоебучий +издрочиться +измандить +измандиться +измандовать +измандоваться +измандовывать +измандовываться +изъебать +изъебаться +изъебашить +изъебашиться +изъебашивать +изъебашиваться +изъебенить +изъебениться +изъебенивать +изъебениваться +изъеб +испиздеться +испиздить +испражнение +испражняться +исхуякать +исхуякаться +исхуякивать +исхуякиваться +исхуярить +исхуяриться +исхуяривать +какать +какашка +кастрат +кастрировать +клитор +клоака +кнахт +кончить +косоебить +косоебиться +кривохуй +курва +курвиный +лахудра +лох +лохудра +лохматка +манда +мандавошка +мандавоха +мандить +мандиться +мандоватая +мандовать +мандохать +мандохаться +мандохивать +мандохиваться +мандошить +мастурбатор +минет +минетить +минетка +минетчик +минетчица +мозгоеб +мозгоебатель +мозгоебать +мозгоебка +мокрожопый +мокропиздая +моча +мочиться +мудак +мудашвили +мудило +мудильщик +мудистый +мудить +мудоеб +наебанный +наебка +наебщик +наебывать +наебываться +наебыш +набздеть +наблядоваться +надроченный +надрочивать +надрочить +надрочиться +надристать +наебать +наебаться +наебнуть +наебнуться +накакать +накакаться +накакивать +напиздить +напиздошить +напиздюрить +напиздюриться +насрать +насраться +нассать +нассаться +натрахать +натрахаться +натрахивать +натрахиваться +нахуякать +нахуякаться +нахуякивать +нахуякиваться +нахуярить +нахуяриться +нахуяриться +нахуяривать +нахуяриваться +нахуячить +нахуячиться +нахуячивать +нахуячиваться +нахуяшить +недоебанный +недоносок +неебущий +нищеебство +оебыват +обдристанный +обдристать +обдрочиться +обосранец +обосранная +обосраный +обосрать +обосраться +обоссанец +обоссаный +обоссать +обоссаться +обоссаться +обоссывать +обоссываться +обпиздить +обпиздиться +обпиздовать +обпиздоваться +обпиздовывать +обпиздовываться +обпиздохать +обпиздохаться +обпиздохивать +обпиздохиваться +обпиздошить +обтрахать +обтрахаться +обтрахивать +обтрахиваться +обхуярить +обхуяриться +обхуячить +объебать +объебаться +объебенить +объебнуть +объебон +одинхуй +однапизда +однохуйственно +оебать +оебашивать +оебашить +оебенивать +оебенить +опедерастить +опизденеть +опизденный +опизденно +опиздеть +опиздить +остоебеть +остоебенить +остоебенило +остопиздеть +остопиздело +остохуело +остохуеть +отдрачивать +отдрачиваться +отдрочить +отдрочиться +отпиздить +отпиздошить +отпиздяшить +отпиздяшиться +отпиздяшивание +отпиздяшивать +отпиздяшиваться +отсасывать +отсасываться +отсосать +отсосаться +оттраханная +оттрахать +оттрахаться +оттрахивать +оттрахиваться +отхерачить +отхуякать +отхуякаться +отхуякивать +отхуякиваться +отхуярить +отхуяриться +отхуяривать +отхуяриваться +отхуячить +отхуячиться +отхуячивать +отхуячиваться +отхуяшить +отхуяшиться +отхуяшивать +отхуяшиваться +отъебать +отъебывание +отъебывать +отъебываться +отъебашить +отъебашивание +отъебашивать +отъебашиваться +отъебенить +отъебениться +отъебенивать +отъебениваться +отъебнуть +отьебаться +отьебашиться +отьебенивание +отьебнуться +охуевать +охуевающий +охуевший +охуение +охуенно +охуенные +охуеть +охуительно +охуительный +охуякать +охуякаться +охуякивать +охуякиваться +охуякнуть +охуякнуться +охуярить +охуяриться +охуяривать +охуяриваться +охуячить +охуячиться +охуячивать +охуячиваться +охуяшить +охуяшиться +охуяшивать +охуяшиваться +очко +перднуть +падла +падлюка +педераст +педерастина +педерастический +педерастия +педик +педрило +пежить +пенис +пердеж +пердеть +пердун +перебздеть +передрачивать +передрочить +передрочиться +переебаться +переебашить +перетрахать +перетрахаться +перетрахивать +перетрахиваться +перехуйнуть +перехуйнуться +перехуякнуть +перехуякнуться +перехуякать +перехуякаться +перехуякивать +перехуякиваться +перехуярить +перехуяриться +перехуяривать +перехуяриваться +перехуячить +перехуячиться +перехуячивать +пидорас +пидор +пизда +пизданутая +пиздануть +пиздануться +пиздато +пизденка +пизденочка +пиздень +пизденыш +пиздеть +пиздец +пиздища +пиздобол +пиздовать +пиздолиз +пиздомол +пиздосос +пиздоход +пиздуй +пиздун +пиздюга +пиздюлей +пиздюли +пиздюлина +пиздюк +пиздюкать +пиздюкаться +пиздюшка +пиздякать +пиздятина +пиздятиной +пиздячий +писька +писюлек +плоскозадая +поебочка +поебывать +поебываться +поблудить +поблядовать +поблядушка +подосрать +подосраться +подоссать +подпиздить +подпиздовать +подпиздоваться +подпиздовывать +подпиздовываться +подпиздохать +подпиздохаться +подпиздохивать +подпиздохиваться +подпиздошить +подпиздошиться +подпиздошивать +подпиздякать +подпиздякаться +подпиздякивать +подпиздякиваться +подпиздярить +подпиздяриться +подпиздяривать +подпиздяриваться +подпиздяхать +подпиздяхаться +подпиздяхивать +подпиздяхиваться +подпиздячить +подпиздячиться +подпиздячивать +подпиздячиваться +подпиздяшить +подпиздяшиться +подпиздяшивать +подпиздяшиваться +подристывать +подрочить +подсирать +подхуякнуть +подхуякнуться +подхуякать +подхуякаться +подхуякивать +подхуякиваться +подхуярить +подхуяриться +подхуяривать +подхуяриваться +подхуячивать +подхуячиться +подхуячивать +подхуячиваться +подхуяшить +подхуяшиться +подхуяшивать +подхуяшиваться +подъеб +подъебать +подъебаться +подъебашить +подъебнуть +подъебка +подъебывать +подъябывать +поебанный +поебать +поебаться +поебень +поебистика +поебон +поебончик +попердеть +попердеться +попердывать +попизденная +попиздеть +попиздистее +попиздить +попиздиться +попиздоватей +попиздоболивать +попиздоболиваться +попиздоболить +попиздоболиться +попиздовать +попиздоваться +попиздовывать +попиздовываться +попиздохать +попиздохаться +попиздохивать +попиздохиваться +попиздошить +попиздошиться +попиздошивать +попиздошиваться +попиздюкать +попиздюкаться +попиздюкивать +попиздюкиваться +попиздюлить +попиздюлиться +попиздюливать +попиздюливаться +попиздюрить +попиздюриться +попиздюривать +попиздюриваться +попиздюхать +попиздюхаться +попиздюхивать +попиздюхиваться +попиздякать +попиздякаться +попиздякивать +попиздякиваться +попиздярить +попиздяриться +попиздяривать +попиздяриваться +попиздяхать +попиздяхаться +попиздяхивать +попиздяхиваться +попиздячить +попиздячиться +попиздячивать +попиздячиваться +попиздяшить +попиздяшиться +попиздяшивать +попиздяшиваться +попизживать +попизживаться +потаскун +потаскуха +потраханная +потрахать +потрахаться +потрахивать +потрахиваться +похер +похуист +похуякать +похуякаться +похуякивать +похуякиваться +похуярить +похуяриться +похуяривать +похуяриваться +похуячить +похуячиться +похуячивать +похуячиваться +похуяшить +похуяшиться +похуяшивать +похуяшиваться +поц +пошмариться +поябывать +приебать +приебаться +приебывать +приебываться +приебашить +приебашиться +приебашивать +приебашиваться +приебенить +приебениться +приебенивать +приебениваться +приебехать +приебехаться +приебехивать +приебехиваться +приебистый +приебурить +приебуриться +приебуривать +приебуриваться +прижопить +прижопывать +прикинуть +примандовать +примандоваться +примавдовывать +примандовываться +примандохать +примандохаться +примандохивать +примандохиваться +примандошить +примандошиться +примандошивать +примандошиваться +примандюкать +примандюкаться +примандюкивать +примандюкиваться +примандехать +примандехаться +примандехивать +примандехиваться +примандюлить +примандюлиться +примандюливать +примандюливаться +примандюрить +примандюриться +примандюривать +примандюриваться +примандякать +примандякаться +примандякивать +примандякиваться +примандярить +примандяриться +примандяривать +примандяриваться +примандяхать +примандяхаться +примандяхивать +примандяхиваться +примандячить +примандячиться +примандячивать +примандячиваться +примандяшить +примандяшиться +примандяшивать +примандяшиваться +примудохать +примудохаться +примудохивать +примудохиваться +примандить +примандиться +припизденный +припиздень +припиздить +припиздиться +припиздывать +припиздываться +припиздовать +припиздоваться +припиздовывать +припиздовываться +припиздохать +припиздохаться +припиздохивать +припиздохиваться +припиздошить +припиздошиться +припиздошивать +припиздошиваться +припиздюкать +припиздюкаться +припиздюкивать +припиздюкиваться +припиздюлить +припиздюлиться +припиздюливать +припиздюливаться +припиздюрить +припиздюриться +припиздюривать +припиздюхать +припиздюриваться +припиздюхаться +припиздюхивать +припиздюхиваться +припиздякать +припиздякаться +припиздякивать +припиздякиваться +припиздярить +припиздяриться +припиздяривать +припиздяриваться +припиздяхать +припиздяхаться +припиздяхивать +припиздяхиваться +припиздячить +припиздячиться +припиздячивать +припиздячиваться +припиздяшить +припиздяшиться +припиздяшивать +припиздяшиваться +припиздронить +припиздрониться +припиздронивать +припиздрониваться +припизживать +припизживаться +прихуеть +прихуякать +прихуякаться +прихуякивать +прихуякиваться +прихуярить +прихуяриться +прихуяривать +прихуяриваться +прихуячить +прихуячиться +прихуячивать +прихуячиваться +прихуяшить +прихуяшиться +прихуяшивать +прихуяшиваться +притрахаться +проблядовать +проблядь +проблядушка +продрачивать +продрачиваться +продрочить +продрочиться +проебать +проебаться +проебашить +проебашиться +проебашивать +проебашиваться +проебенить +проебениться +проебашивать +проебашиваться +проебывать +проебываться +пропиздить +пропиздиться +пропиздоболивать +пропиздоболиваться +пропиздоболить +пропиздоболиться +пропиздовать +пропиздоваться +пропиздовывать +пропиздовываться +пропиздохать +пропиздохаться +пропиздохивать +пропиздохиваться +пропиздошить +пропиздошиться +пропиздошивать +пропиздошиваться +пропиздюкать +пропиздюкаться +пропиздюкивать +пропиздюкиваться +пропиздюлить +пропиздюлиться +пропиздюливать +пропиздюливаться +пропиздюрить +пропиздюриться +пропиздюривать +пропиздюриваться +пропиздюхать +пропиздюхаться +пропиздюхивать +пропиздюхиваться +пропиздякать +пропиздякаться +пропиздякивать +пропиздякиваться +пропиздярить +пропиздяриться +пропиздяривать +пропиздяриваться +пропиздяхать +пропиздяхивать +пропиздяхиваться +пропиздячить +пропиздячиться +пропиздячивать +пропиздячиваться +пропиздяшить +пропиздяшиться +пропиздяшивать +пропиздяшиваться +пропизживать +пропизживаться +пропиздон +прохуякать +прохуякаться +прохуякивать +прохуякиваться +прохуярить +прохуяриться +прохуяривать +прохуяриваться +прохуячить +прохуячиться +прохуячивать +прохуячиваться +прохуяшить +прохуяшиться +прохуяшивать +прохуяшиваться +разблядоваться +раздрочить +раздрочиться +раззалупаться +разнохуйственно +разъебать +разъебаться +разъебашить +разъебашиться +разъебашивать +разъебашиваться +разъебенить +разъебениться +разъебенивать +разъебениваться +распиздить +распиздиться +распиздовать +распиздоваться +распиздовывать +распиздовываться +распиздохать +распиздохаться +распиздохивать +распиздохиваться +распиздошить +распиздошиться +распиздошивать +распиздошиваться +распиздон +распиздяй +расхуярить +расхуяриться +расхуяривать +расхуяриваться +расхуячить +расхуячиться +расхуячивать +расхуячиваться +сдрочить +сестроеб +сифилитик +сифилюга +скурвиться +смандить +смандиться +смандить +сперматозавр +спиздеть +стерва +стервоза +сука +суки +сукин +сукины +суходрочка +суходрочкой +сучара +сучий +сучка +сучье +схуякать +схуякаться +схуякивать +схуякиваться +схуярить +схуяриться +схуяривать +схуяриваться +схуячить +схуячиться +схуячивать +съебывать +съебываться +съебать +съебаться +съебашить +съебашиться +съебашивать +съебашиваться +съебенить +съебениться +съебенивать +тварь +толстожопый +толстозадая +торчило +траханье +трахать +трахаться +трахнуть +трахнуться +трепак +триппер +уебывать +уебываться +уебыш +ублюдок +уебать +уебашить +уебашивать +уебенить +уебище +усраться +усрачка +уссать +уссаться +ухуякать +ухуякаться +ухуякивать +ухуякиваться +ухуярить +ухуяриться +ухуяривать +ухуяриваться +ухуячить +ухуячиться +ухуячивать +ухуячиваться +ухуяшить +ухуяшиться +ухуяшивать +ухуяшиваться +фаллос +фекал +фекалий +фекалии +хер +херами +херня +херовина +херов +хрен +хреново +хреновое +хреновый +хуевина +хуев +хуево +хуевый +хуек +хуечек +худоебина +хуебень +хуев +хуева +хуевато +хуеватый +хуеглот +хуегрыз +хуедрыга +хуемудрие +хуемыслие +хуеньки +хуеплет +хуесос +хуета +хуетень +хуец +хуила +хуиный +хуистый +хуишко +хуище +хуи +хуило +хуйло +хуй +хуйство +хуйнуть +хуйня +хуйню +хули +хуюжить +хуюжиться +хуюживать +хуюживаться +хуюшки +хуя +хуяк +хуякать +хуями +хуярить +хуяриться +хуястый +хуячий +хуячить +хуячиться +хуяшить +целка +целку +целочка +черножопые +чернозадый +член +шалава +шлюха +шмара +шмарить +шмариться +хуйло +отъебись +отьебись +спам +spam +мудила +пидарасы