这个问题无处不在,我看了很多答案。很多建议使用mysql_real_escape_string但这不是一个选项,因为它现在已经折旧了。 作为PHP / SQL的新手,特别是在安全方面,我只能希望你们中的一些人能够在这里提供帮助。我知道一个事实,我已经使用的一些程序有助于安全性(作为一个例子:我在定义query_params之前没有使用:pname。这导致SQL解释像'values'这样的提交; drop table dbname; as actual从命令未被执行中拯救我的一件事是将空格转换为下划线。
'search_submit.php'中的PHP代码
<?php
$pname=str_replace(' ','_',strtolower($_GET['pname']));
require 'connection.php';
if(isset($_GET['pname'])){
if(preg_match("/\w/i", $_GET['pname'])){
$query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = :pname;";
$query_params = array(
':pname' => str_replace(' ','_',strtolower($_GET['pname']))
);
$prep=$conn->prepare($query);
$result=$prep->execute($query_params) or die("failed!");
$row = $prep->fetch();
if($row)
{
die("Exists");
}
else{
echo("doesn't");
}
}
}
else{
echo "<p>Error</p>";
}
?>
'index.html'中的HTML代码:
<form method="get" action="search_submit.php" id="searchform">
<input type="text" name="pname">
<input type="submit" name="input" value="Search">
截至目前,所有内容似乎都运行正常,任何偷偷摸摸的提交都只是被解释为文本。但我是一个非常偏执的人。
非常感谢任何建议/更改。