2015-06-23 5 views
-1

У меня большая проблема, что кто-то нападает на меня, добавляя несколько строк в мой db. Hes используя форму, которую я имею на своем веб-сайте. Я получил около 2500 строк в моем db, и все строки были разными. Его генерирует любой скрипт. У вас есть предложения, как я могу это исправить? это моя форма у меня на моем сайтеДобавление нескольких строк в mysql

<?php 
if(isset($_POST['type'])) {$type = mysql_real_escape_string($_POST['type']);} 
if(isset($_POST['ip'])) {$ip = mysql_real_escape_string($_POST['ip']);} 
if(isset($_POST['port'])) {$port = mysql_real_escape_string($_POST['port']);} 
$add_date = time(); 
if(isset($_POST['email'])) {$email = mysql_real_escape_string($_POST['email']);} 
if(isset($_POST['web'])) {$web = mysql_real_escape_string($_POST['web']);} 
if(isset($_POST['mod'])) {$mod = mysql_real_escape_string($_POST['mod']);} 


echo " 
<form action='#' method='post'> 

<legend>Formulár pre pridanie serveru</legend> 

<table> 
<tr> 
<td> 
Hra: 
</td> 
<td> 
<select name='type'> 
<option value='cs16'>Counter Strike 1.6</option> 
<option value='source'>Counter Strike Source</option> 
<option value='csgo'>Counter Strike Global Offensive</option> 
</select> 
(vyberte hru) 
</td> 
</tr> 

<tr> 
<td>    
Typ: 
</td> 
<td> 
<select name='mod'>"; 

$modes = mysql_query("SELECT * FROM `lgsl_modes`") or die(mysql_error()); 
while($modes_names = mysql_fetch_array($modes)) 
{ 
echo '<option value="'.$modes_names['mod'].'">'.$modes_names['name'].'</option>'; 
} 

echo "</select> 
(vyberte herný mód) 
</td> 
</tr> 


<tr> 
<td>    
IP serveru: 
</td> 
<td> 
<input type='text' name='ip' value='' required> 
(iba číslice a bodky) 
</td> 
</tr> 

<tr> 
<td>    
Port serveru: 
</td> 
<td> 
<input type='text' name='port' value='' required> 
(iba číslice) 
</td> 
</tr> 

<tr> 
<td>    
Web serveru: 
</td> 
<td> 
<input type='text' name='web' value='' required> 
(uvádzajte bez začiatočného http://) 
</td> 
</tr> 

<tr> 
<td>    
Váš email: 
</td> 
<td> 
<input type='text' name='email' value='' required> 
(kontaktný email) 
</td> 
</tr> 

<tr> 
<td> 
<input type='submit' name='odoslat' value='Odoslať'> 
</td> 
</tr> 
</table>    
</form> 
"; 


if($ip) if(!preg_match("/^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$/",$ip)) $usermsgip="Ip adresa bola uvedená v zlom tvare."; 
if($port) if(!preg_match("/^[0-9]{5}$/",$port)) $usermsgport="Port bol uvedený v zlom tvare."; 
if($email) if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/",$email)) $usermsgemail="Email bol uvedený v zlom tvare.";  
if($web) if(!preg_match("%^((https?://)|(www\.))([a-z0-9-].?)+(:[0-9]+)?(/.*)?$%i" ,$web)) $usermsgweb="Web bol uvedený v zlom tvare."; 

if(isset($_POST['odoslat']) && $usermsgip || $usermsgport || $usermsgemail || $usermsgweb) { 
if($usermsgip) echo $usermsgip."<br>"; 
if($usermsgport) echo $usermsgport."<br>"; 
if($usermsgemail) echo $usermsgemail."<br>"; 
if($usermsgweb) echo $usermsgweb."<br>"; 
} 


if(isset($_POST['odoslat']) && !$usermsgip && !$usermsgport && !$usermsgemail && !$usermsgweb) { 
$kontrola = mysql_query("SELECT * FROM `lgsl` WHERE `ip`='".$ip."' AND `c_port`=".$port);                     
if(mysql_num_rows($kontrola)) {echo "Server už bol pridaný do banlistu.";} 
else { 
mysql_query("INSERT INTO `lgsl` (`type`, `ip`, `c_port`, `q_port`, `disabled`, `add_date`, `email`, `web`, `mod`) 
VALUES ('$type', '$ip', '$port', '$port', '1', '$add_date', '$email', '$web', '$mod')"); 
echo 'Server bol úspešne odoslaný na schválenie.'; 
} 
} 
?> 
+0

Если вы можете, вы должны [прекратить использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Вам нужно сделать какую-то проверку формы и, возможно, перехватить, чтобы кто-то не мог автоматически заполнить форму и, следовательно, добавить данные. –

+0

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. Я бы предположил, что вы нашли форум для разработки (возможно, [quora] (http://www.quora.com/Computer-Programming)?), чтобы выработать общие положения. Затем, когда у вас возникнут проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –

ответ

0

Я думаю, вы должны переписать весь скрипт с помощью PDO. С Pdo вы можете легко избежать SQL-инъекций. Вот link, где вы можете найти, что и вся сеть полна руководства и примеров.

В любом случае, если вы хотите исправить свой сценарий, вы можете использовать Captcha, чтобы избежать автоматической отправки формы и библиотеки для дезинфекции ввода.

Здесь вы найдете простой captcha example и good sanitize library.

Вы можете использовать here некоторые полезные советы для решения проблем.

Надеюсь, это поможет.