ドメインの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>
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
内部にあなたの資格情報をハードコードしてコードを投稿しないでください。 – Mederic