2017-06-09 4 views
-1

ドメインのwhois情報をmysqlデータベースに挿入しようとしていますが、.co.uk/.comなどの特定のドメイン名の場合は、mysqli insert文が機能しません。彼らはmysqlステートメントを破る ""というアポストロフィを持っています。php/mysqlでapostrobeを削除するには

私は変数をmysql_real_escape_string、str_replaceで実行しようとしましたが、コマンドの最後にtr -d \ '\' \があります(これはlinuxコマンドラインでは動作しますがスクリプトでは動作しません)。

誰かが私がどこに間違っているか教えていただけますか?具体的には、問題を引き起こしている$ whois1と$ whois変数です。なぜ私はアポストロを取り除くのが大変なのか分かりません。

この

は、現在のコード

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
    <link rel="stylesheet" type="text/css" href="stylesheet.css"> 
    <meta http-equiv="content-type" content="text/html; charset=windows-1250"> 
    <meta name="generator" content="PSPad editor, www.pspad.com"> 
    <title>CWCS Domain Checker Tool</title> 
</head> 
<body> 
    <div class="header"> 
    <a href="index.php"> 
    <img src="cwcs-logo.png"> 
    </a> 
</div> 
    <hr/> 
    <div class="buttonholder"> 
    <form action="domainchecker.php" method="post"> 
    <label for="domain"> <input class="submit" type="text" name="domain" /> </label> 
    <input class="submitbutton" type="submit" name="submit" value="Query" /> 
    </form> 
    <a href="history.php" type="button" class="submitbutton">Search History</a> 
</div> 
    <?php 
    #functions for grabbing data 
    $domain = $_POST['domain']; 
     function getWhois($domain) 
     { 
     $whoisOutput = shell_exec("whois $domain | tr -d '\'\' "); 
     return $whoisOutput; 

     } 

     function getSSL($domain) 
     { 
     $sslOutput = shell_exec("curl --insecure -v https://$domain 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'"); 
     return $sslOutput; 
     } 

     function getDNSA($domain) 
     { 
     $dnsOutputA = shell_exec("dig $domain A | grep A | grep -v ns | grep $domain"); 
     return $dnsOutputA; 
     } 

     function getDNSMX($domain) 
     { 
     $dnsOutputMX = shell_exec("dig $domain MX | grep MX | grep -v ns| grep $domain"); 
     return $dnsOutputMX; 
     } 

     function getDNSTXT($domain) 
     { 
     $dnsOutputTXT= shell_exec("dig $domain TXT | grep TXT | grep -v ns | grep $domain"); 
     return $dnsOutputTXT; 
     } 

     function getDNSNS($domain) 
     { 
     $dnsOutputNS = shell_exec("dig $domain NS | grep NS | grep -v A | grep $domain"); 
     return $dnsOutputNS; 
     } 

     function getBlacklist($domain) 
     { 
     $ip = gethostbyname("$domain") 
     $blackListOutput = shell_exec("curl -I -X GET api.moocher.io/badip/$ip"); 

     return $blackListOutput; 
     } 

     function getPing($domain) 
     { 
     $pingOutput = shell_exec("ping -c 3 $domain"); 
     return $pingOutput; 
     } 
     function getTracert($domain) 
     { 
     $tracertOutput = shell_exec("traceroute $domain"); 
     return $tracertOutput; 
     } 
     function getNMAP($domain) 
     { 
     $nmapOutput = shell_exec("nmap $domain"); 
     return $nmapOutput; 
     } 
    ?> 
    <?php 
    #grabs all the information needed for adding to database/displaying. 
    $domainname1 = $domain; 
    $date1 = date("Y/m/d"); 
    $whois1 = getWhois($domain); 
    $dnsa1 = getDNSA($domain); 
    $dnsmx1 = getDNSMX($domain); 
    $dnstxt1 = getDNSTXT($domain); 
    $dnsns1 = getDNSNS($domain); 
    $blacklist1 = getBlacklist($domain); 
    $ping1 = getPing($domain); 
    $tracert1 = getTracert($domain); 
    $nmap1 = getNMAP($domain); 
    $sslinfo1 = getSSL($domain); 

?> 

    <table> 
    <tr> 
     <td ><h3>DNS Result</h3> 
     <pre> 
      <?php 
      echo $dnsa1; 
      echo $dnsmx1; 
      echo $dnstxt1; 
      echo $dnsns1; 
      ?> 
     </pre> 
     </td> 
    </tr> 

     <tr> 
     <td ><h3>WHOIS Result</h3> 
     <pre> 
      <?php 
       echo $whois1; 
      ?> 
     </pre> 
     </td> 
    </tr> 

     <tr> 
    <td><h3>SSL Result</h3> 
     <pre> 
     <?php 
     echo $sslinfo1; 
     ?> 
     </pre> 
    </td> 
    </tr> 

     <tr> 
     <td><h3>Blacklist Result</h3> 
     <pre> 
      <?php 
      echo $blacklist1; 
      ?> 
     </pre> 
     </td> 
    </tr> 

    <tr> 
     <td><h3>NMAP Result</h3> 
     <pre> 
      <?php 
      echo $nmap1; 
      ?> 
     </pre> 
     </td> 
    </tr> 

    <tr> 
     <td><h3>PING/MTR Result</h3> 
     <pre> 
      <?php 
      echo $ping1; 
      echo $tracert1; 
      ?> 
     </pre> 
     </td> 
    </tr> 
    </table> 

    <!-- MYSQL STORE HISTORY --> 
    <?php 
    #creates a new mysql connection 
    $servername = "localhost"; 
    $dbname = "domainhistory"; 


    $conn = mysqli_connect($servername, $username, $password, $dbname); 

    if (!$conn) 
    { 
     die("Connection failed: " . mysqli_connect_error()); 
    } 

    $domainname = mysqli_real_escape_string($domainame1); 
    $date= mysqli_real_escape_string($date1); 
    $whois = mysqli_real_escape_string($whois1); 
    $dnsa =mysqli_real_escape_string($dnsa1); 
    $dnsmx = mysqli_real_escape_string($dnsmx1); 
    $dnstext = mysqli_real_escape_string($dnstext1); 
    $dnsns = mysqli_real_escape_string($dnsns1); 
    $blacklist = mysqli_real_escape_string($blacklist1); 
    $ping = mysqli_real_escape_string($ping1); 
    $tracert = mysqli_real_escape_string($tracert1); 
    $nmap = mysqli_real_escape_string($nmap1); 
    $sslinfo = mysqli_real_escape_string($sslinfo1); 
    #inserts all the data into the table 




    $stmt = $conn->prepare("INSERT INTO `history` (`domain`, `date`, `whois`, `dnsa`, `dnsmx`, `dnstxt`, `dnsns`, `blacklist`, `ping`, `tracert`, `nmap`, `sslinfo`) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param($domain1, $date1, $whois1, $dnsa1, $dnsmx1, $dnstext1, $dnsns1, $blacklist1, $ping1, $tracert1, $nmap1, $sslinfo1); 

if ($stmt->execute()) { 
    echo "New record create sucessfully"; 
         } 


    #says if connection/record was sucessful 
    if (mysqli_query($conn, $sql)) 
    { 
     echo "New record create sucessfully"; 
    } else 
    { 
     echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
    } 

#closes the mysql connection 
    mysqli_close($conn); 
    ?> 


</html> 
+0

1)APIを混在させています。 mysql_はmysqli_ではなく、まったく動作しません。 2)real_escape_stringは安全ではありません。 mysqliを使用しているので、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[bind_param](http://php.net/ manual/en/mysqli-stmt.bind-param.php)。とにかく正しく連結していないので、これはあなたの引用問題を解決/迂回します。 – aynber

+0

内部にあなたの資格情報をハードコードしてコードを投稿しないでください。 – Mederic

答えて

1

バインドされたパラメータを使用する必要があります。これは、入力に対して衛生的な入力を行うため、パラメータにmysqli_real_escape_stringを使用する必要がなくなります。ここで

... 

$stmt = $conn->prepare("INSERT INTO `history` (`domain`, `date`, `whois`, `dnsa`, `dnsmx`, `dnstxt`, `dnsns`, `blacklist`, `ping`, `tracert`, `nmap`, `sslinfo`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('ssssssssssss', $domainname1, $date1, $whois1, $dnsa1, $dnsmx1, $dnstxt1, $dnsns1, $blacklist1, $ping1, $tracert1, $nmap1, $sslinfo1); 

if ($result = $stmt->execute()) { 
    echo "New record create sucessfully"; 

... 

は、完全なファイルの更新や作業検証である、あなたは、SQLに単一引用符をエスケープ持って当然のユーザー名とパスワードで

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
<link rel="stylesheet" type="text/css" href="stylesheet.css"> 
<meta http-equiv="content-type" content="text/html; charset=windows-1250"> 
<meta name="generator" content="PSPad editor, www.pspad.com"> 
<title>CWCS Domain Checker Tool</title> 
</head> 
<body> 
<div class="header"> 
    <a href="index.php"> 
<img src="cwcs-logo.png"> 
</a> 
</div> 
<hr/> 
<div class="buttonholder"> 
<form action="domainchecker.php" method="post"> 
    <label for="domain"> <input class="submit" type="text" name="domain" /> </label> 
    <input class="submitbutton" type="submit" name="submit" value="Query" /> 
</form> 
<a href="history.php" type="button" class="submitbutton">Search History</a> 
</div> 
<?php 
#functions for grabbing data 
$domain = $_POST['domain']; 
    function getWhois($domain) 
    { 
     $whoisOutput = shell_exec("whois $domain | tr -d '\'\' "); 
     return $whoisOutput; 

    } 

    function getSSL($domain) 
    { 
     $sslOutput = shell_exec("curl --insecure -v https://$domain 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }'"); 
     return $sslOutput; 
    } 

    function getDNSA($domain) 
    { 
     $dnsOutputA = shell_exec("dig $domain A | grep A | grep -v ns | grep $domain"); 
     return $dnsOutputA; 
    } 

    function getDNSMX($domain) 
    { 
     $dnsOutputMX = shell_exec("dig $domain MX | grep MX | grep -v ns| grep $domain"); 
     return $dnsOutputMX; 
    } 

    function getDNSTXT($domain) 
    { 
     $dnsOutputTXT= shell_exec("dig $domain TXT | grep TXT | grep -v ns | grep $domain"); 
     return $dnsOutputTXT; 
    } 

    function getDNSNS($domain) 
    { 
     $dnsOutputNS = shell_exec("dig $domain NS | grep NS | grep -v A | grep $domain"); 
     return $dnsOutputNS; 
    } 

    function getBlacklist($domain) 
    { 
     $ip = gethostbyname("$domain"); 
     $blackListOutput = shell_exec("curl -I -X GET api.moocher.io/badip/$ip"); 

     return $blackListOutput; 
    } 

    function getPing($domain) 
    { 
     $pingOutput = shell_exec("ping -c 3 $domain"); 
     return $pingOutput; 
    } 
    function getTracert($domain) 
    { 
     $tracertOutput = shell_exec("traceroute $domain"); 
     return $tracertOutput; 
    } 
    function getNMAP($domain) 
    { 
     $nmapOutput = 'test';//shell_exec("nmap $domain"); 
     return $nmapOutput; 
    } 
?> 
<?php 
#grabs all the information needed for adding to database/displaying. 
$domainname1 = $domain; 
$date1 = date("Y/m/d"); 
$whois1 = getWhois($domain); 
$dnsa1 = getDNSA($domain); 
$dnsmx1 = getDNSMX($domain); 
$dnstxt1 = getDNSTXT($domain); 
$dnsns1 = getDNSNS($domain); 
$blacklist1 = getBlacklist($domain); 
$ping1 = getPing($domain); 
$tracert1 = getTracert($domain); 
$nmap1 = getNMAP($domain); 
$sslinfo1 = getSSL($domain); 

?> 

<table> 
    <tr> 
    <td ><h3>DNS Result</h3> 
     <pre> 
     <?php 
     echo $dnsa1; 
     echo $dnsmx1; 
     echo $dnstxt1; 
     echo $dnsns1; 
     ?> 
     </pre> 
    </td> 
    </tr> 

    <tr> 
    <td ><h3>WHOIS Result</h3> 
     <pre> 
     <?php 
       echo $whois1; 
     ?> 
     </pre> 
    </td> 
    </tr> 

    <tr> 
    <td><h3>SSL Result</h3> 
    <pre> 
     <?php 
     echo $sslinfo1; 
     ?> 
    </pre> 
    </td> 
    </tr> 

    <tr> 
    <td><h3>Blacklist Result</h3> 
     <pre> 
     <?php 
      echo $blacklist1; 
     ?> 
     </pre> 
    </td> 
    </tr> 

    <tr> 
    <td><h3>NMAP Result</h3> 
     <pre> 
     <?php 
      echo $nmap1; 
     ?> 
     </pre> 
    </td> 
    </tr> 

    <tr> 
    <td><h3>PING/MTR Result</h3> 
     <pre> 
     <?php 
     echo $ping1; 
     echo $tracert1; 
     ?> 
     </pre> 
    </td> 
    </tr> 
</table> 

<!-- MYSQL STORE HISTORY --> 
<?php 
#creates a new mysql connection 
$servername = "localhost"; 
$dbname = "domainhistory"; 
$username = ""; 
$password = ""; 


$conn = mysqli_connect($servername, $username, $password, $dbname); 

if (!$conn) 
{ 
    die("Connection failed: " . mysqli_connect_error()); 
} 

#inserts all the data into the table 




$stmt = $conn->prepare("INSERT INTO `history` (`domain`, `date`, `whois`, `dnsa`, `dnsmx`, `dnstxt`, `dnsns`, `blacklist`, `ping`, `tracert`, `nmap`, `sslinfo`) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
$stmt->bind_param('ssssssssssss', $domainname1, $date1, $whois1, $dnsa1, $dnsmx1, $dnstxt1, $dnsns1, $blacklist1, $ping1, $tracert1, $nmap1, $sslinfo1); 

if ($result = $stmt->execute()) { 
    echo "New record create sucessfully"; 
} 

#closes the mysql connection 
mysqli_close($conn); 
?> 


</html> 
+0

私はこれを試しましたが、それと同じエラーです。しかし、登録者に "'"が付いていないので、.orgドメイン名の場合もうまくいきます。私が使ったことを示すためにコードを更新しました。 – TheOne745665

+0

MySQLが返す正確なエラーは何ですか? – sjdaws

+0

SQL構文にエラーがあります。 1 Bowden Drive Beeston Nottingham Not '2行目。これは、返されたテキストの中に「whoisドメイン」を置いたときに参照されます。 "登録者の住所"私はそれが登録者の中で、その声明を破っていると信じています。しかし、私が試したことはすべて、私はちょうどその血まみれのアポストロを取り除くことができません。 – TheOne745665

0

INSERT文で二重引用符が間違っている以下

$whois1 = str_replace("'"," ",$whois1); 

参照(仕事をdidntの)私が試したstr_replaceです。一重引用符が必要です。 はもっと正しい:

$sql = "INSERT INTO `history` (`domain`,`date`,`whois`,`dnsa`,`dnsmx`,`dnstxt`,`dnsns`,`blacklist`,`ping`,`tracert`,`nmap`, `sslinfo`) 
    VALUES ('$domain', '$date', '$whois', '$dnsa', '$dnsmx', '$dnstxt', '$dnsns', '$blacklist', '$ping', '$tracert', '$nmap', '$sslinfo')"; 

さらに正しいSQLのプレースホルダとプリペアドステートメントを使用することです。 (アインバーは言った)。

0

を配置する必要があります。

例:

I''m - 私はあなたが文字列値にリテラルをエスケープする必要が

だとして> DBに格納されます。 (二重引用符は二重引用符ではありません)。

私は見ることができます、バインディングの問題があります。

$domainname = mysqli_real_escape_string($domainame1); 

が、$ domainame1代わりに$ domainameで挿入;:あなたは脱出してきました

+0

彼はすでに 'mysqli_real_escape_string'を使用しています。引用符をエスケープすることは必須ではありません。引用符を置き換えたい場合は、mysqli_real_escape_stringを使用する前に引用符を使用する必要があります。また、あなたの答えに取り組んで、もう少し時間を費やす必要があります。たとえば、2つの引用符を1つの引用符ではなくスペースで置き換える理由を説明できます。 – Adder

+0

ありがとう@Adder。申し訳ありませんが、そのタイプミスです。ところで、彼は "mysqli_real_escape_string"を使用しましたが、間違ったパラメータをバインドしました。ご覧のとおり、$ domainname = mysqli_real_escape_string($ domainame1);しかし、$ domainname1で挿入されます。どちらが無効です。 – VIRA

+0

これは正しいはずです。新しい変数は$ domainnameで、古い変数は$ domainname1でした(スクリプトの一番上にあります)。 – TheOne745665

関連する問題