我有一个Web表单,它从用户获取2个字符串值和2个整数值,并将它们存储在数据库中。
如何确保整体实际注明并清理输入,以便Bobby Tables不会让我访问?
这是我的表单代码:
if(isset($_POST['submit']))
{
$formTitle = $_POST['title'];
$formAuthor = $_POST['author'];
$formPagecount = $_POST["pagecount"];
$formCurrentpage = $_POST["currentpage"];
}
<form method="post" action="index.php">
Title: <input type="text" size="25" maxlength="250" name="title" />
<br/>
Author: <input type="text" size="25" maxlength="250" name="author" />
<br/>
Page Count: <input type="text" size="25" maxlength="25" name="pagecount" />
<br/>
Current Page: <input type="text" size="25" maxlength="25" name="currentpage" />
<br />
<input type="submit" value="Add new book" name="submit" />
</form>
答案 0 :(得分:3)
您可以使用各种type checking functions
检查php中的数据类型答案 1 :(得分:1)
您可能需要检查/执行以下操作:
$_POST
组件上的isset
将有用trim
,因此包含“”的字段不算作包含数据的字段有一些框架可以帮助您完成所有这些。
例如:
(你重用现有的优秀代码越多,你的应用程序就越好,我会说:用新的,未经测试的代码引入错误的风险较小;-))
确保数据正常后,可以将其插入数据库。
这意味着你必须正确地逃脱它。
根据您使用的功能/类别,您将看一下
mysqli_real_escape_string
表示字符串intval
表示整数(强制它们为整数,确实如此)PDO::quote
mysqli_prepare
,PDO::prepare
最后,如果数据未成功验证,您可能需要重新回显表单,其中的字段已包含用户第一次输入的内容。
在那里,您需要将数据转义为HTML格式,以避免XSS。看看htmlspecialchars
同样的,顺便说一下,如果你想在你应用程序的其他地方的另一个屏幕上显示这些数据......
答案 2 :(得分:0)
答案 3 :(得分:0)
检查用户输入数据是否仅由数字组成的唯一安全方法是(1)使用正则表达式或(2)使用ctype-extension(首选)。
if (ctype_digit($_POST['pagecount'])) {
// ...
}
如果将整数值插入数据库,则不必转义它们,但要确保它们确实是整数(转换它们);对于字符串,你应该使用mysql_real_escape_string但是使用预准备语句永远不会错(但通常更好)。
顺便说一句:检查提交按钮是不安全的,因为IE&lt; = 6只有在点击提交表单时才发送(如果表单是通过输入提交的话)键)。
答案 4 :(得分:0)
PDO及其准备好的陈述将为您节省麻烦,即使它们最初看起来更复杂。对于整数,你可以使用intval($ input),但请记住,PHP将以无限的智慧将非数字输入转换为0。