gpt4 book ai didi

php - 如何正确保护表单 - 平面文件数据库

转载 作者:行者123 更新时间:2023-11-30 13:26:33 24 4
gpt4 key购买 nike

我的表单将用户输入(输入+文本区域)保存到平面文件数据库中。我在 Google 上发现了很多关于如何创建平面文件数据库的示例,但没有人正确地涵盖了一些关于如何正确保护表单免受 XSS 和其他恶意攻击的良好基础知识。

我知道最好的方法是拥有(例如:)一个 SQL 数据库......但事实并非如此。

到目前为止我知道(这可能是错误的!如果是的话请纠正我):

  • 最好使用 .php 文件来存储数据(在 <?php ...data... ?> 内)而不是 .txt 文件
  • 如果可能,删除带有 deny from all 的 .htaccess在数据库文件夹内
  • 在提交之前通过 php 验证您的输入和文本区域。 (但是具体怎么做???我的意思是...最好的方法是什么?)
  • 正确验证您的字段 (php)(究竟如何...有些做法仅适用于 sql 数据库,不适用于 ffdb...)
  • 我看起来像 mysql_real_escape_string但对 ffdb 来说已经足够了

你有什么想法?感谢您的帮助

最佳答案

不知道你从哪里得到的,但是通过使用

  • .php files to store data (inside ) instead of .txt files

你可以绝对确定它会允许任何人他们想要的任何攻击,

  • drop an .htaccess with a deny from all inside the database folder

完全没有意义,

所以,似乎唯一的问题是

  • how to properly secure form from XSS

使用htmlspecialchars()解决了这个问题

这是我很久以前在遥远的星系中写的这样一个脚本的例子......
如果有什么不清楚的地方,请随时询问。

<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
// iterating over POST data
foreach($_POST as $key => $value) {
//first we are doing non-destructive modifications
//in case we will need to show the data back in the form on error
$value = trim($value);
if (get_magic_quotes_gpc()) $value = stripslashes($value);
$value = htmlspecialchars($value,ENT_QUOTES);
$_POST[$key] = $value;
//here go "destructive" modifications, specific to the storage format
$value = str_replace("\r","",$value);
$value = str_replace("\n","<br>",$value);
$value = str_replace("|","&brvbar;",$value);
$msg[$key] = $value;
}
//various validations
$err='';
if (!$msg['name']) $err.="You forgot to introduce yourself<br>";
if (!$msg['notes']) $err.="You forgot to leave a comment!<br>";
//and so on
//...
// if no errors - writing to the file
if (!$err) {
$s = $msg['name']."|".$msg['email']."|".$msg['notes']."|".time()."\n";
$fp = fopen("gbook.txt","a");
fwrite($fp,$s);
fclose($fp);
//and then redirect
Header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
//otherwise - show the filled form
} else {
//if it was not a POST request
//we have to fill variables used in form
$_POST['name'] = $_POST['email'] = $_POST['notes'] ='';
}
?>
<html>
<head></head>
<body>
<? if ($err): ?><font color=red><b><?=$err?></b></font><? endif ?>
<form method="POST">
Name: <input type="text" name="name" value="<?=$_POST['name']?>"><br>
Email: <input type="text" name="email" value="<?=$_POST['email']?>"><br>
Notes: <textarea rows="3" cols="30" name="notes"><?=$_POST['notes']?></textarea><br>
<input type="submit" name="submit">
</form>
</body>
</html>

它将产生一个所谓的管道分隔格式,像这样

name1|email1|comment
name2|email2|comment

你可以使用 file()+explode() 读取它

关于php - 如何正确保护表单 - 平面文件数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8268694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com