[英]Load URL in an Iframe with Javascript once PHP is executed
盡管關鍵字PHP // Javascript // Load // URL在網絡上顯示了很多結果,但我無法在腦海中清楚地說明事情。 我正在嘗試通過真實案例研究來學習,但我現在有點迷茫。
我為一些命令行腳本構建了一個 Web 界面。
1 - 用戶在 HTML 表單中輸入一個詞,
2 - 表單提交給 PHP 腳本,
3 - 腳本在服務器上執行命令並在 HTML 頁面中返回結果。
到現在為止還挺好。
但是腳本可能需要很長時間來處理,所以我想改變結果的顯示方式。
我想使用[ttyd][1] ,這是一個終端共享實用程序,可以讓我實時獲得漂亮的結果:
1 - 用戶在 HTML 表單中輸入一個詞,
2 - 表單被提交到一個 PHP 腳本,
3 - 腳本在服務器上執行命令,打開一個端口,並等待 HTTP 連接,
4 - 建立 HTTP 連接並且結果出現在 iframe 中。
並在 HTML 頁面上返回結果。
這是我的 PHP 示例:
<?php
require __DIR__ . "/vendor/autoload.php";
ini_set("display_errors", "1");
ini_set("display_startup_errors", "1");
error_reporting(E_ALL);
//Securize user inputs
function securize($p)
{
$v = htmlspecialchars($p); //Convertir les caractères spéciaux
$v = trim($v); //Supprimer les espaces dans la requête
$v = rtrim($v); //Supprimer les espaces à la fin de la requête
$v = strtolower($v); //Tout mettre en minuscule
$v = strip_tags($v); //Supprimer les balises html dans la requête
$v = stripslashes($v); //Supprimer les slash dans la requête
$v = stripcslashes($v); //Supprimer les backslash dans la requête
$v = escapeshellcmd($v); //Protège les caractères spéciaux du Shell
return $v;
}
//Tool selector
if (isset($_POST["search"])) {
$term = securize($_POST["search"]);
if (!empty($term)) {
$port = rand(5000, 6000); //Get a random port for ttyd
if ($_POST["tool"] == "ghunt") {
if (mailValidate($term)) {
$tool = "python3 ghunt.py email";
$cli = (craft($tool, $term, $port));
passthru($cli);
die();
} else {
echo "<script type='text/javascript'>alert('$term n\'est pas une adresse mail valide');</script>";
die();
}
}
}
// Mail validation
// Takes user input
function mailValidate($p)
{
if (filter_var($p, FILTER_VALIDATE_EMAIL)) {
$v = true;
} else {
$v = false;
}
return $v;
}
// Command prep
// Takes command line + User input + port
function craft($tool, $term, $port)
{
$v = "ttyd -o -R -p $port $tool $term";
return $v;
}
?>
到目前為止,我所有的嘗試都失敗了。
我試圖設置一個PHP 重定向header("Location: http://ipadress:$port/")
但 PHP 腳本似乎在執行命令后立即停止。 所以我也嘗試使用 Javascript 和 Jquery 和load()函數,但不知道把東西放在哪里。
PHP 不能處理多個“動作”,比如執行和重定向?
這是我的 HTML 表單的示例:
<body>
<form method="POST" action="search.php" target="iframe">
<fieldset>
<legend>Recherchez un mail, un téléphone ou un pseudo...</legend>
<input type="search" placeholder="mail, téléphone ou pseudo" name="search">
<br>
<div class="fields">
<fieldset>
<legend>Email</legend>
<input type="radio" name="tool" value="ghunt">
<label for="ghunt"><b><div class="tooltip">Ghunt<span class="tooltiptext">Informations d'un compte google</span></div></b></label>
</fieldset>
</div>
<input class="button" type="submit" name="submit" value="Seek">
</fieldset>
</form>
<iframe id="ttyd" name="iframe"> </iframe>
</body>
非常感謝您的燈光 [1]: https : //github.com/tsl0922/ttyd
感謝@chris-g 和大量調試會話,我能夠找到兩種解決方案來實現我的目標並解決問題。
以下是實現的步驟:
formSubmit()
、 changeUrl()
和bind()
(表單提交、iframe src 和兩個函數的綁定)。bind()
的按鈕。exec()
使用它。 這應該可以工作,因為formSubmit()
將數據發送到 PHP 腳本,並且changeUrl()
在 iframe 中添加了正確的 src,但由於某種原因,它不是。
iframe 僅在“ttyd”進程終止時加載。
以下是代碼示例:
索引.php
<?php
// Start the session and set a random port in the "ttyd" variable
session_start();
$_SESSION["ttyd"] = rand(5000, 6000);
?>
<!DOCTYPE html>
<html>
<head>
[...]
</head>
<body>
<script>var site = '<?php echo "http://51.91.108.124:$_SESSION[ttyd]"; ?>'</script> <!-- Grab session "ttyd" var in JavaScript -->
<script src="js.js"></script> <!-- Include JS script file -->
<form name="osint" method="POST" action="search.php" target="iframe">
<fieldset>
<legend>Recherchez un mail, un téléphone ou un pseudo...</legend>
<input type="search" placeholder="mail, téléphone ou pseudo" name="search">
[...]
<div class="fields">
<fieldset>
<legend>Email</legend>
<input type="radio" name="tool" value="ghunt">
<label for="ghunt"><b>
<div class="tooltip">Ghunt<span class="tooltiptext">Informations d'un compte google</span></div>
</b></label>
</fieldset>
[...]
</div>
[...]
<input type="button" class="button" onclick="bind();" value="Seek!">
</fieldset>
</form>
<iframe class="iframe" name="iframe"> </iframe>
</body>
</html>
js.js
//Form submission
function formSubmit() {
document.forms["osint"].submit();
}
//Load iframe
function changeUrl() {
document.getElementsByName("iframe")[0].src = site;
}
//Bind functions
function bind(){
changeUrl(); formSubmit();
}
搜索.php
<?php
session_start();
require __DIR__ . "/vendor/autoload.php";
//Securize user inputs
function securize($p)
{
$v = htmlspecialchars($p); //Convertir les caractères spéciaux
$v = trim($v); //Supprimer les espaces dans la requête
$v = rtrim($v); //Supprimer les espaces à la fin de la requête
$v = strtolower($v); //Tout mettre en minuscule
$v = strip_tags($v); //Supprimer les balises html dans la requête
$v = stripslashes($v); //Supprimer les slash dans la requête
$v = stripcslashes($v); //Supprimer les backslash dans la requête
$v = escapeshellcmd($v); //Protège les caractères spéciaux du Shell
return $v;
}
//Mail validation
function mailValidate($p)
{
if (filter_var($p, FILTER_VALIDATE_EMAIL)) {
$v = true;
} else {
$v = false;
}
return $v;
}
//Command line crafting
function craft($port, $loc, $tool, $term)
{
$ttyd = "ttyd -o -R -t rendererType=webgl -t disableLeaveAlert=true -t disableReconnect=true -p $port";
$v = "$loc && $ttyd $tool $term";
exec($v);
}
//Choix de l'outil
if (isset($_POST["search"])) {
$term = securize($_POST["search"]);
if (!empty($term)) {
if (isset($_POST["tool"])) {
if ($_POST["tool"] == "ghunt") {
if (mailValidate($term)) {
$location = "cd /home/www-data/GHunt";
$tool = "python3 ghunt.py email";
$cli = (craft($_SESSION["ttyd"], $location, $tool, $term));
die();
} else {
echo "<script type='text/javascript'>alert('$term n\'est pas une adresse mail valide');</script>";
die();
}
} else {
echo "<script type='text/javascript'>alert('On ne fais pas de magie. Choisissez un outil !');</script>";
die();
}
} else {
echo "<script type='text/javascript'>alert('La nature a horreur du vide, entrez un terme de recherche');</script>";
die();
}
}
?>
該問題與 iframe 有關。 表單( target="iframe"
)和changeUrl()
都應該在同一個 iframe 中輸入數據,導致麻煩。
由於表單不應該返回數據,我只需要更改表單的目標並將其發送到隱藏的 iframe。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.