Security 我应该做什么来保护我的web表单UI?

Security 我应该做什么来保护我的web表单UI?,security,validation,forms,Security,Validation,Forms,我主要有桌面编程背景。在我的业余时间,我涉猎了网页开发,从一个问题到另一个解决方案,我的页面都有缺陷,并取得了一些成功。我已经达到了我需要允许站点登录并从用户社区收集一些数据的地步(无论如何,这是计划) 所以,我意识到,世界上有很多邪恶的用户,他们急切地等待着一个不安全的网站进行装饰、破坏和妥协。如果我真的幸运的话,其中一些用户可能会访问我的网站。我想为他们做好合理的准备 我有一个UI来收集登录用户的信息,其中一些信息被呈现到HTML页面中。我的网站在后端是用PHP/MySQL实现的,在前端是用

我主要有桌面编程背景。在我的业余时间,我涉猎了网页开发,从一个问题到另一个解决方案,我的页面都有缺陷,并取得了一些成功。我已经达到了我需要允许站点登录并从用户社区收集一些数据的地步(无论如何,这是计划)

所以,我意识到,世界上有很多邪恶的用户,他们急切地等待着一个不安全的网站进行装饰、破坏和妥协。如果我真的幸运的话,其中一些用户可能会访问我的网站。我想为他们做好合理的准备

我有一个UI来收集登录用户的信息,其中一些信息被呈现到HTML页面中。我的网站在后端是用PHP/MySQL实现的,在前端是用javascript实现的。我对如何解决以下问题的任何建议/建议感兴趣:

  • 跨站点脚本:我希望这对我来说相当简单,因为我不支持标记输入,只支持纯文本。我应该只是扫描[A-Za-z]*然后扔掉所有其他东西吗?我对这里可以使用的攻击类型一无所知,所以我很想听听你的建议

  • SQL注入:我在这里使用的是参数化查询(mysqli),所以我希望我在这个部门一切顺利。我是否应该对用户输入的数据进行额外的验证以保护自己

  • 巨魔行为:我支持用户在谷歌地图上绘制的多段线,所以(如果我有幸获得一些流量的话)我希望在西欧看到一些手绘的阴茎。我计划实施一些用户驱动的节制(flag inaproriate SO风格),但我对阻止这种行为的任何其他建议都感兴趣

  • 登录:My是一个非常简单的web表单、PHP中的MySQL查询、mp5编码的密码验证和存储的会话cookie。我希望这个系统足够简单,可以安全,但我想知道他们是否有我不知道的漏洞


我希望我在这里没有说得太详细,并期待听到您的评论。

针对XSS htmlspecialchars已经足够了,用它来清除输出。
SQL注入:如果mysql在添加参数之前解析您的查询,那么就不可能注入任何恶意内容。

您的第一个问题是您担心您的UI。要遵循的一条简单规则是,永远不要假设提交的数据来自您创建的UI。不要信任传入的数据,而要清理传出的数据。使用PHP的strip_标记和/或htmlentities

某些字符(,“,”)可能会破坏您的HTML并允许注入,但应该被允许。尤其是在密码中。请使用htmlentities来允许使用这些字符。请想想如果某些字符在未被“转义”的情况下被输出,会发生什么情况


基于Javascript的检查和验证只应用于改善用户体验(即防止页面重新加载)。除非作为绝对的最后手段,否则不要使用eval。

除了只允许[a-Za-z]之外,我还将研究其他方法*只是因为你现在不打算允许任何格式标记,并不意味着你就不需要它。就个人而言,我讨厌重写那些我没有设计来适应未来需要的东西


您可能希望将一个已接受标记的白名单放在一起,并根据需要添加/删除,或者研究将任何提交的标记编码为纯文本。

跨站点脚本可以通过htmlentities轻松处理,还有一个名为strip tags的函数,它可以从帖子中删除标记,您会注意到这允许您需要将某些标记列为白名单。如果您决定将来允许特定标记通过,请记住这些标记上的属性不会以任何方式清除,这可以用于在页面中插入javascript(onClick等)如果你想在将来进行格式化,我建议你使用一种格式化语言(比如[b]粗体或类似的语言)来阻止你的用户直接在页面中输入html

SQL注入也很容易处理,因为您可以准备语句,然后将用户数据作为参数传递给准备好的语句。这将阻止任何用户输入修改SQL语句

CSRF(跨站点请求伪造)是一个经常被忽略的漏洞,允许攻击者使用表单从受害者帐户提交数据。这通常通过为img src指定表单get字符串来完成(受害者的图像加载、get加载和表单处理,但用户不知道)。此外,如果您使用post,攻击者可以使用javascript自动提交隐藏表单,以执行与上述相同的操作。要解决此问题,您需要为每个表单生成一个密钥,在会话中保留一个密钥,在表单本身上保留一个密钥(作为隐藏输入)。提交表单时,将输入的密钥与会话中的密钥进行比较,只有在匹配时才继续


一些安全公司还建议您使用属性“autocomplete=”off“,这样就不会保存密码了。

我可能应该更清楚一些,这个验证是在PHP服务器上完成的,没有关于提交来自何处的假设。不错的想法:)。如果您使用多字节字符集,请使用htmlspecialchars而不是htmlentities。看起来strip_标记就是我要找的。我怀疑我是否会在我使用的数据中实现任何花哨的格式,但感谢您对这些内容的概述。我还将看看如何处理CSRF案件,看起来相当简单。干杯