我有一个关于如何使字符串在查询中安全运行的问题,通常。
我有一个secure_input
函数,它通过一些PHP函数拖动所有$_POST
和$_GET
以使其安全,并且似乎重新格式化工作,但我仍然单引号出错,即使它们使用mysqli_real_escape_string()
的反斜杠正确转义。
以下是它的运行方式:
// function which drives on every post and get
function secureinput($link, $value) {
$value = htmlentities(stripslashes($value));
$value = str_ireplace("script", "blocked", $value);
$value = mysqli_real_escape_string($link, $value);
return $value;
}
// then I got another function which performs all of the mysqli requests and it starts with converting all the post and get data
if(isset($_POST)) {
foreach($_POST as $post) {
$post = secureinput($link, $post);
echo "post converted<pre>" . $post . "</pre><br />";
}
}
if(isset($_GET)) {
foreach($_GET as $get) {
$get = secureinput($link, $get);
echo "get converted<pre>" . $get . "</pre><br />";
}
}
输出看起来非常适合查询,但查询仍然存在:
&#34;一些不起作用的文字&#34;
怎么还会失败?
我为某些textareas实现了ckeditor
,它为单引号发送了一个替代方案,它在查询中完美运行,ckeditor
将其替换为S#39; (&amp;而不是S)。
PHP中是否有一个函数可以执行相同的操作,而不是反斜杠?单引号以同样的方式进行格式化也是相当不错的。
答案 0 :(得分:0)
如果您使用PDO,则内置了为您执行此操作的功能。查看this question.
答案 1 :(得分:0)
为了避免诸如可能的SQL注入之类的不良行为,我建议您使用mysqli扩展提供的预准备语句作为描述here。
另一种选择是使用PDO abstraction layer。