如何确保我的用户数据在PHP和MySQL中有效?

时间:2009-08-06 00:33:14

标签: php mysql validation

我有一个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>

5 个答案:

答案 0 :(得分:3)

可以使用prepared statements

清理数据库的输入

您可以使用各种type checking functions

检查php中的数据类型

答案 1 :(得分:1)

您可能需要检查/执行以下操作:

  • 确认表单已提交:$_POST组件上的isset将有用
  • 查询您的数据是“有效的”:
    • 用户是否在每个字段中输入数据?
    • 必填字段是否包含数据?
    • 在检查之前不要忘记trim,因此包含“”的字段不算作包含数据的字段
  • 实际上,您可以按照自己的方式切换数据:
    • 标题和作者是否包含字符串?超过X个字符?简短的Y字符?任何“fordibben”字符或值?
    • 其他两个字段是否包含数字数据?好吗?只有数字(没有像3E5之类的东西)不比你认为的好吗?

有一些框架可以帮助您完成所有这些。
例如:

(你重用现有的优秀代码越多,你的应用程序就越好,我会说:用新的,未经测试的代码引入错误的风险较小;-))


确保数据正常后,可以将其插入数据库。
这意味着你必须正确地逃脱它。
根据您使用的功能/类别,您将看一下


最后,如果数据未成功验证,您可能需要重新回显表单,其中的字段已包含用户第一次输入的内容。

在那里,您需要将数据转义为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。