我有一个简单的PHP脚本,希望人们可以简单地转到http://mydomain.com/get.php?id=TEXTMASH-1FD0066D-F75A-5D0C-6784-2FA0D055B0D7
之类的东西,并从我的mysql数据库中提取这个文本块。我是非常新的PHP。知道所有预期的ID应该是TEXTMASH-1FD0066D-F75A-5D0C-6784-2FA0D055B0D7
格式的东西,我如何“清理”_GET以便它不容易受到任何攻击?我看了一些指南但是,我只是没有得到它。有人介意给我看?我真的很感激。
<?php
include_once("../../extern/dbinclude.php");
$id= $_GET['id'];
$result = mysql_query("SELECT text FROM mytable WHERE id='$id'")
or die(mysql_error());
$row = mysql_fetch_array($result);
if($row)
{
echo nl2br($row['text']);
} else {
?>
<h2>Invalid URL</h2>
<?php
}
答案 0 :(得分:2)
您可以使用mysql_real_escape_string
或可能使用正则表达式来检查输入。一个可能的正则表达式:
$pattern = '/^TEXTMASH-[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/';
if(!preg_match($pattern, $id))
{
echo "No dice >:(";
exit;
}
答案 1 :(得分:0)
清理输入的两个主要方面:
每当您显示字符串变量时,请确保escape任何HTML字符。
答案 2 :(得分:0)
到目前为止,最好的方法是通过准备好的陈述。到目前为止,其他答案建议使用mysql_real_escape_string
,这有效,但很容易被开发人员和PITA错过,必须一直使用。因为很容易错过并且很难找到这些错误,所以它不是一个可靠或可维护的解决方案。
准备好的陈述将这种痛苦从过程中解脱出来,并自动适当地逃避。
您可以在其他地方找到我们的更多信息on SO。