Сообщение изменено: Inori (12 июня 2013 - 21:06 )
Вопросы и Ответы
#1
Отправлено 25 ноября 2005 - 22:21
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
#2
Отправлено 26 ноября 2005 - 12:34
#include <iostream.h> #include <string.h> int main(void) { char name[15]; cout<<"Welcome\nPlease ebter Your name:\n"; cin>>name; cout<<"Hello "<<name; cout<<"\nDecode the number: 442777777999\n And then enter the decoded word\n"; bool flag = true; while(flag) { char pass[6]; cout<<"The word is: "; cin>>pass; if(strcmp(pass,"harry") == 0) { cout<<"\nNice job, You have made it!\nGreetings for you,"<<name<<" from Me! :)\n"; return 0; } else { cout<<"\nSorry, wrong word.\nDo you need a clue ?"; int answer; cout<<"\nYes[1], No[0]\n"; cin>>answer; if(answer == 0) { cout<<"\nPerhaps the next time You will manage to give the right answer\n Bye!"; flag = false; } if(answer == 1) { cout<<"\nTry to type that number on Mobile phone\n"; } } } return 0; }
P.S.: я компилировал в DMC
Сообщение изменено: vic-221 (26 ноября 2005 - 12:36 )
"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy
#3
Отправлено 26 ноября 2005 - 15:56
И опять вопрос: как сделать, что бы после того, елси ввёл правильное слово, то появлялось поздравление это я понял, но вот что бы консоль не закрывалась, и это можно было прочитать? getch() я ставил, в этом куске, а он опять возращается к Enter The Word.
Ж)
Добавлено в [mergetime]1133013362[/mergetime]
А, я понял!
#include <iostream.h> #include <string.h> #include <conio.h> int main(void) { char name[15]; cout<<"Welcome\nPlease enter Your name:\n"; cin>>name; cout<<"Hello "<<name; cout<<"\nDecode the number: 442777777999 And then enter the decoded word\n"; bool flag = true; while(flag) { char pass[6]; cout<<"The word is: "; cin>>pass; if(strcmp(pass,"harry") == 0) { cout<<"\nNice job, You have made it!\nGreetings for you,"<<name<<" from Me! :)\n"; getch(); return 0; } else { cout<<"\nSorry, wrong word.\nDo you need a clue ?"; int answer; cout<<"\nYes[ 1], No[0]\n"; cin>>answer; if(answer == 0) { cout<<"\nPerhaps the next time You will manage to give the right answer\n Bye!"; flag = false; getch(); return 0; } if(answer == 1) { cout<<"\nTry to type that number on Mobile phone\n"; } } } return 0; }
Ща просмотрел, странная вещь получается, если в ьполе ответа ввести два слова, ну или просто буквы разделить пробелом, то он начинает ужас творить!
Может не очень красиво выглядит, но вроде пашет, Спасибо vic-221!
П.С. МОдерам: Не против, если тека останется, у меня просто возникает много вопросов по этому поводу, да я думаю не только у меня.
С Уважением,
Gnom
Сообщение изменено: Gn0m (26 ноября 2005 - 16:00 )
#4
Отправлено 27 ноября 2005 - 20:28
файл data.cpp:
#include <iostream.h> #include "data.h" int main(void) { person_data records; int index; load_data(&records); print_data(&records); return 0; }
файл data.h:
#include <stdio.h> #include <iostream.h> struct person_data { char* first_name; char* last_name; char* email_addr; long phone_number; }; void load_data(person_data* pObject) { printf("Enter the first name: "); scanf("%s",pObject -> first_name); printf("Enter the last name: "); scanf("%s",pObject -> last_name); printf("Enter the e-mail address: "); scanf("%s",pObject -> email_addr); printf("Enter the phone number: "); scanf("%d",pObject -> phone_number); } void print_data(person_data* pObject) { cout << "First name: " << pObject -> first_name << endl << endl; cout << "Last name: " << pObject -> last_name << endl << endl; cout << "E-mail address: " << pObject -> email_addr << endl << endl; cout << "Phone number: " << pObject -> phone_number << endl; }
Сообщение изменено: vic-221 (27 ноября 2005 - 20:43 )
"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy
#5
Отправлено 27 ноября 2005 - 21:51
Так, теперь у меня вопрос ! Почему этот код не работает:
файл data.cpp:#include <iostream.h> #include "data.h" int main(void) { person_data records; int index; load_data(&records); print_data(&records); return 0; }файл data.h:#include <stdio.h> #include <iostream.h> struct person_data { char* first_name; char* last_name; char* email_addr; long phone_number; }; void load_data(person_data* pObject) { printf("Enter the first name: "); scanf("%s",pObject -> first_name); printf("Enter the last name: "); scanf("%s",pObject -> last_name); printf("Enter the e-mail address: "); scanf("%s",pObject -> email_addr); printf("Enter the phone number: "); scanf("%d",pObject -> phone_number); } void print_data(person_data* pObject) { cout << "First name: " << pObject -> first_name << endl << endl; cout << "Last name: " << pObject -> last_name << endl << endl; cout << "E-mail address: " << pObject -> email_addr << endl << endl; cout << "Phone number: " << pObject -> phone_number << endl; }
1. include <iostream.h>
в C++ не нужно .h в конце стандартных библиотечных файлов, просто include <iostream>
2. в твоем обьявлении person_data - first_name, last_name, email_addr - ето указатели на char, однако, когда ты пытаешься считать в них данные результат не предопределен, т.к они просто указывают на какое то место в памяти, а не на специально определенное для них свободное место. В результате программа ломается (crashes). Тут есть несколько вариантов, как ето исправить, например, определить ети переменные как массив char размером N байт, или же динамически выделять память во время исполнения программы (функция malloc в C, оператор new в C++). Так как ето все-таки C++ код (вроде бы), то я думаю, еше лучше использовать std::string, т.к. тогда вообше не придеться беспокоиться о памяти.
3. scanf() - не очень надежная функция и заставить ее работать надежно не очень легко. Проблем несколько, например, если у тебя буффер ввода размером 10, и ты используешь scanf("%s", buf); a user вводит больше 10, то у тебя buffer overflow, что не есть хорошо. можно, конечно, сделать так: scanf("%9s", buf), но тут еше такая проблема, что scanf читает до первого пробела, то есть два слова, разделенные пробелом, просто так scanf не считает. Лучше всего для чтения строк из входного потока подходит fgets(buf, sizeof buf, stdin) - ето C (scanf кстати тоже c), а в C++ getline(cin, str), где str - std::string.
4. у тебя нигде нет ни префиксов std::, ни using обьявлений.
Добавлено в [mergetime]1133121119[/mergetime]
Gn0m, в твоем коде тоже потенциальный buffer overflow, переполнение буффера,
char name[15];
...
char pass[6];
если юзер введет больше, то программа будет писать уже не в свою зарезервированную память. Контроллировать ввод пользователя необходимо всегда, надеяться, что ввод будет правильным не следует никогда.
#8
Отправлено 28 ноября 2005 - 21:23
Сообщение изменено: vic-221 (28 ноября 2005 - 21:24 )
"Sometimes I'm scared of being Ozzy Osbourne. But it could have been worse. I could have been Sting" © Ozzy
#9
Отправлено 28 ноября 2005 - 22:28
префикс std:: указывает на то, что имя после него является частью пространства имен(namespace) std, то есть пространства имен стандартной библиотеки. Страуструп так пишет о пространствах имен: "Пространствo имен является механизмом отражения логического группирования. Если некоторые обьявления можно обьединить по какому-либо критерию, их можно поместить в одно пространство имен."
чтобы всегда не добавлять квалификатор(префикс) для явного указания пространства имен, можно использовать using-обьявления и using-директивы.
using-обьявление делает доступным одно имя из Пр.имен, а using-дирктива все Пр.имен. Например,
using std::cout; using std::cin; // теперь можно просто писать cout ... cin ... без std::или
using namespace std; // можно использовать все имена из std без префиксапоследний вариант часто подвергают критике, т.к. использовать все имена из std врядли кому-то придет в голову в одной программе, и может возникнуть путаница с именами библиотечными и именами юзера. Хотя нет ничего страшно, если в простой учебной программе для краткости написать using namespcae std;
Сообщение изменено: V^v (28 ноября 2005 - 22:38 )
#10
Отправлено 29 ноября 2005 - 15:46
http://www.lib.ru/CPPHB/cpptut.txt
Хотя, конечно, я предпочитаю "бумажный" вариант, чтобы в любое время всё что надо найти, не сворачивая редактор.
#11
Отправлено 15 августа 2010 - 13:17
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
#13
Отправлено 15 августа 2010 - 13:27
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
#15
Отправлено 22 августа 2010 - 18:11
<?php // Include Variables include ("variables.php"); // Connect To Database $con = mysql_connect("$db_name","$db_user","$db_pass"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_close($con); ?>В variables.php у нас обозначены "$db_name","$db_user","$db_pass", в открытом виде. Файл у нас лежит в папке admin, которая защищена .htaccess-om (логин-пароль для доступа к папке). Самому файлу вариаблов выдан 666 доступ.
Каков шанс взлома и возможность редиске узнать акк-пароль доступа к БД?
Также интересно узнать насколько вы доверяете защите с помощью .htaccess?
Сообщение изменено: Clement (22 августа 2010 - 18:13 )
#17
Отправлено 23 августа 2010 - 17:26
А какая разница, в Windows или в Linux? Для изучения основ все равно.Какую литературу или видео/аудио уроки посоветуйте, если нету возможности кодить в Windows? Только линункс.
Страуструп - это классика. Нужно только разобраться с ключами GCC и запуском откомпилированных программ.
#19
Отправлено 23 августа 2010 - 18:17
Нет, не просто.
Вот допустим:
gcc sitemap.c -o sitemap -L/usr/lib/mysql -lmysqlclient -lm
иными словами, из исходника sitemap.c компилируется исполняемый файл sitemap с поддержкой mysql и математических функций.
Сообщение изменено: еть. (23 августа 2010 - 18:17 )
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
#20
Отправлено 23 августа 2010 - 18:59
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
#22
Отправлено 23 августа 2010 - 20:13
Хм. "Чтобы никто не догадался!" (с) Операция ЫВ данном случае - какой смысл в .htaccess? С ним или без него, при обращении браузером к variables.php никакой информации злоумышленик не получит. Если же у него есть ФТП доступ или же к шеллу, то .htaccess точно не спасёт.
Просто защитить всю папку .htaccess-ом или 666, что надёжнее? Понятно что если узнают пароль к фтп или шеллу - труба.
Спасибо за ответ.
Тогда еще один вопрос: к примеру мы делаем поиск по базе данных, метод - ПОСТ. Сможет ли он сделать хитрый запрос к базе данных и как-то использовать против хозяина сайта? А то нет желания делать trimmed защиту запросов. Понимаю, что без самого кода сложно представить, но если так, навскидку. Реально гадость сделать?
Сообщение изменено: Clement (23 августа 2010 - 20:15 )
#23
Отправлено 24 августа 2010 - 14:34
// STUDY :3
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
int nValue1;
cout<<"1: ";
cin>>nValue1;
int nValue2;
cout<<"2";
cin>>nValue2;
int nValue3;
cout<<"3";
cin>>nValue3;
int nValue4;
nValue4 = nValue1 + nValue2 + nValue3;
cout>>"4: ";
cout>>nValue4;
return 0;
}
Что я сделал тут не так, как надо?
ololo2.cpp: In function ‘int main(int, char**)’:
ololo2.cpp:20: error: no match for ‘operator>>’ in ‘std::cout >> "4: "’
ololo2.cpp:21: error: no match for ‘operator>>’ in ‘std::cout >> nValue4’
И
#26
Отправлено 30 августа 2010 - 11:00
ну во первых ПОСТ, ГЕТ разницы нет. Инъекции везде делаются по одному же и тому принципу. Приходящие данные - любые - нужно фильтровать и использовать специальные функции. mysql_real_escape_string, приравнивание к типу, проверку на допустимое значение и т.д.Хм. "Чтобы никто не догадался!" (с) Операция Ы
Просто защитить всю папку .htaccess-ом или 666, что надёжнее? Понятно что если узнают пароль к фтп или шеллу - труба.
Спасибо за ответ.
Тогда еще один вопрос: к примеру мы делаем поиск по базе данных, метод - ПОСТ. Сможет ли он сделать хитрый запрос к базе данных и как-то использовать против хозяина сайта? А то нет желания делать trimmed защиту запросов. Понимаю, что без самого кода сложно представить, но если так, навскидку. Реально гадость сделать?
#27
Отправлено 30 августа 2010 - 15:03
Может кто поделиться литературой где подробнее можно почитать про инжекты?
#29
Отправлено 30 августа 2010 - 17:41
xss вообще из другой оперы.в гyгле поищи "xss уязвимости", тут есть нюансы: версия mysql, sql запрос.
гуглить надо "sql injection".
– Совсем худо, – заключил хозяин, – что-то, воля ваша, недоброе таится в мужчинах, избегающих вина, игр, общества прелестных женщин, застольной беседы. Такие люди или тяжко больны, или втайне ненавидят окружающих.
Читать еще на тему: PHP, Javascript, HTML/CSS, SQL, Ruby, Java, C/C++, Visual Basic, C#
Тематические форумы →
Software & Designing →
Программирование →
Ищу тьютора/репетиторa по проекту Java.Автор темы: Chichi, 21 апр 2020 Java, SQL, Javascript |
|
|||
Тематические форумы →
Software & Designing →
Программирование →
Пишу сайты грамотно на своём движке!Автор темы: alx4ever, 25 окт 2019 PHP |
|
|||
Тематические форумы →
Software & Designing →
Программирование →
Estonian language pack Opencart 2.3Автор темы: libero23, 29 ноя 2017 PHP |
|
|||
Тематические форумы →
Software & Designing →
Программирование →
Ищу Java Developer(a) для работы в Амстердаме. Зарплата 4000 евро чистымиАвтор темы: Oxana09, 07 ноя 2017 Java |
|
|||
Тематические форумы →
Software & Designing →
Программирование →
Ищем в команду разработчикаАвтор темы: Gleb Makarov, 02 ноя 2015 PHP, Javascript |
|